From 579804f26c6d53c35d112fffc3af80b2b6e7ca3b Mon Sep 17 00:00:00 2001 From: Randy Hartgrove Date: Mon, 30 Oct 2023 22:37:26 -0700 Subject: [PATCH] HWA/FT/02-RTL: Update to 23.2 --- Getting_Started/Vitis/Part2.md | 8 +- Getting_Started/Vitis/Part3.md | 2 +- Getting_Started/Vitis/Part4-data_center.md | 16 +- .../Vitis/Part4-embedded_platform.md | 24 +-- Getting_Started/Vitis/Part4-unified-ide.md | 22 +- Getting_Started/Vitis/Part5.md | 6 +- Getting_Started/Vitis/README.md | 14 +- Getting_Started/Vitis_HLS/README.md | 8 +- .../Vitis_HLS/unified-dataflow_design.md | 8 +- .../unified-optimization_techniques.md | 8 +- .../Vitis_HLS/unified_ide_project.md | 6 +- Getting_Started/Vitis_Libraries/README.md | 4 +- .../01-convolution-tutorial/README.md | 2 +- .../lab3_build_app_kernel.md | 4 +- .../Design_Tutorials/02-bloom/README.md | 4 +- .../README.md | 6 +- .../04-traveling-salesperson/README.md | 6 +- .../05-bottom_up_rtl_kernel/README.md | 4 +- .../02-System_Setup/README.md | 4 +- .../docs/module1_baseline/README.md | 2 - .../06-cholesky-accel/README.md | 2 +- .../07-host-code-opt/README.md | 8 +- .../02-mixing-c-rtl-kernels/README.md | 198 +++++++----------- ...-rtl-kernels_timeline_one_kernel_vitis.png | Bin 0 -> 101388 bytes .../images/xrt-host-step1-timeline.png | Bin 0 -> 69046 bytes .../images/xrt-host-step2-timeline.png | Bin 0 -> 107362 bytes .../reference-files/Makefile | 59 +++--- .../reference-files/hls_config.cfg | 10 + .../src/host/xrt-host_step1.cpp | 83 ++++++++ .../src/host/xrt-host_step2.cpp | 87 ++++++++ .../reference-files/xrt.ini | 2 +- .../script/run_sprite_mixing_c_rtl_kernels.sh | 27 --- .../rtl_kernel_wizard_0.xo | Bin 38790 -> 0 bytes .../workspace/readme.txt | 1 - .../README.md | 6 +- .../fifo_sizing_and_deadlocks.md | 2 +- .../04-mult-ddr-banks/README.md | 9 +- .../05-using-multiple-cu/README.md | 8 +- .../README.md | 4 +- .../Feature_Tutorials/07-using-hbm/README.md | 4 +- .../08-using-hostmem/README.rst | 5 +- 41 files changed, 387 insertions(+), 286 deletions(-) create mode 100644 Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/images/mixing-c-rtl-kernels_timeline_one_kernel_vitis.png create mode 100644 Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/images/xrt-host-step1-timeline.png create mode 100644 Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/images/xrt-host-step2-timeline.png create mode 100644 Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/reference-files/hls_config.cfg create mode 100644 Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/reference-files/src/host/xrt-host_step1.cpp create mode 100644 Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/reference-files/src/host/xrt-host_step2.cpp delete mode 100644 Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/script/run_sprite_mixing_c_rtl_kernels.sh delete mode 100644 Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/script/workplace/rtl_project/src/rtl_kernel/rtl_kernel_wizard_0/rtl_kernel_wizard_0.xo delete mode 100644 Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/workspace/readme.txt diff --git a/Getting_Started/Vitis/Part2.md b/Getting_Started/Vitis/Part2.md index ff15f29fff..6221cc61c6 100644 --- a/Getting_Started/Vitis/Part2.md +++ b/Getting_Started/Vitis/Part2.md @@ -17,7 +17,7 @@ To develop and deploy applications with Vitis, you need to install the Vitis uni ### Step 1: Review the Installation Requirements -Prior to starting the installation process, make sure to check the [Vitis installation requirements](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=igz1531201833632). +Prior to starting the installation process, make sure to check the [Vitis installation requirements](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=igz1531201833632.html). >**NOTE:** Windows OS support is limited to the Vitis embedded software development flow. The Vitis application acceleration flow is only supported on Linux. @@ -29,9 +29,9 @@ Download the latest version of the Vitis from the [AMD download website](https:/ After downloading the Vitis, XRT and platform packages, install them in the following order and according to the provided instructions: -1. [Install the Vitis Software Platform](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=juk1557377661419) +1. [Install the Vitis Software Platform](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=juk1557377661419.html) -2. [Install the Xilinx Runtime and Platforms](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=pjr1542153622642) +2. [Install the Xilinx Runtime and Platforms](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=pjr1542153622642.html) >**NOTE:** Installing XRT is not required when targeting Arm®-based embedded platforms. The Vitis compiler has its own copy of xclbinutil for hardware generation; and for software compilation, you can use the XRT from the sysroot on the Embedded Processor platform. @@ -75,7 +75,7 @@ The packages required for each platform can be found on the corresponding downlo To configure the environment to run Vitis, run the following script, which sets up the environment to run in a specific command shell. ```bash -source /Vitis/2022.2/settings64.sh +source /Vitis/2023.2/settings64.sh ``` >**NOTE:** `.csh` scripts are also provided but this tutorial assumes a bash shell is used. diff --git a/Getting_Started/Vitis/Part3.md b/Getting_Started/Vitis/Part3.md index 0b20c3c273..c49d9a077c 100644 --- a/Getting_Started/Vitis/Part3.md +++ b/Getting_Started/Vitis/Part3.md @@ -52,7 +52,7 @@ Other than this, the functionality of the vector-add kernel is very easily recog The pragmas are used to map function parameters to distinct kernel ports. By mapping the two inputs parameters to different input ports, the kernel will be able to read both inputs in parallel. As a general rule, and without going into further details in this introductory tutorial, it is important to think about interface requirements of hardware accelerators and they will have a determining impact on maximum achievable performance. -The Vitis online documentation provides comprehensive information on [C/C++ Kernels](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=rjk1519742919747) as well as a complete [HLS Pragmas](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=tfo1593136615570) reference guide. +The Vitis online documentation provides comprehensive information on [C/C++ Kernels](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=rjk1519742919747.html) as well as a complete [HLS Pragmas](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=hls-pragmas-tfo1593136615570.html) reference guide. ### The Source Code for the Host Program diff --git a/Getting_Started/Vitis/Part4-data_center.md b/Getting_Started/Vitis/Part4-data_center.md index c035f98653..ee85425e5e 100644 --- a/Getting_Started/Vitis/Part4-data_center.md +++ b/Getting_Started/Vitis/Part4-data_center.md @@ -13,15 +13,15 @@ ## Part 4: Build and Run the Data Center Application - In this fourth part of the Introduction to Vitis tutorial, you will compile and run the vector-add example using each of three build targets supported in the Vitis flow as described below. The overall flow is described in [Introduction to Data Center Acceleration for Software Programmers](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=fvi1642629875790), and includes the image flow diagram shown below. From the image you can see the standard G++ compilation process for the host application, and the use of the Vitis compiler (`v++`) for building the AMD device binary (`xclbin`). These are the steps you will be working through in this lab. + In this fourth part of the Introduction to Vitis tutorial, you will compile and run the vector-add example using each of three build targets supported in the Vitis flow as described below. The overall flow is described in [Introduction to Data Center Acceleration for Software Programmers](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=fvi1642629875790.html), and includes the image flow diagram shown below. From the image you can see the standard G++ compilation process for the host application, and the use of the Vitis compiler (`v++`) for building the AMD device binary (`xclbin`). These are the steps you will be working through in this lab. ![img](./images/data_center_flow.png) -* Software Emulation: The kernel code is compiled to run on the host processor. This allows iterative algorithm refinement through fast build-and-run loops. This target is useful for identifying syntax errors, performing source-level debugging of the kernel code running together with application, and verifying the behavior of the system. Refer to [Software Emulation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=xvc1504034328357) for more information. +* Software Emulation: The kernel code is compiled to run on the host processor. This allows iterative algorithm refinement through fast build-and-run loops. This target is useful for identifying syntax errors, performing source-level debugging of the kernel code running together with application, and verifying the behavior of the system. Refer to [Software Emulation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=using-software-emulation-xvc1504034328357.html) for more information. -* Hardware Emulation: The kernel code is compiled into a hardware model (RTL), which is run in a dedicated simulator. This build-and-run loop takes longer but provides a detailed, cycle-accurate view of kernel activity. This target is useful for testing the functionality of the logic that will go in the FPGA and getting initial performance estimates. Refer to [Hardware Emulation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=ldh1504034328524) for more information. +* Hardware Emulation: The kernel code is compiled into a hardware model (RTL), which is run in a dedicated simulator. This build-and-run loop takes longer but provides a detailed, cycle-accurate view of kernel activity. This target is useful for testing the functionality of the logic that will go in the FPGA and getting initial performance estimates. Refer to [Hardware Emulation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=using-hardware-emulation-ldh1504034328524.html) for more information. -* Hardware: The kernel code is compiled into a hardware model (RTL) and then implemented on the FPGA, resulting in a binary that will run on the actual FPGA. Refer to [System Hardware Target](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=prg1504034328691) for more information. +* Hardware: The kernel code is compiled into a hardware model (RTL) and then implemented on the FPGA, resulting in a binary that will run on the actual FPGA. Refer to [System Hardware Target](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=building-for-target-fpga-platform-prg1504034328691.html) for more information. ## Building and Running on Alveo U250 Data-Center Accelerator Card @@ -65,10 +65,10 @@ v++ -l -t sw_emu --platform xilinx_u250_gen3x16_xdma_4_1_202210_1 --config ../sr Here is a brief explanation of each of these four commands: -1. `g++` compiles the host application using the standard GNU C compiler. Refer to [Building the Software Application](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=asy1528754332783) for more information. -2. `emconfigutil` generates an emulation configuration file which defines the device type and quantity of devices to emulate for the specified platform. Refer to [emconfigutil](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=nrj1570599837825) for more information. -3. `v++ -c -k vadd` compiles the source code for the vector-add accelerator into a compiled kernel object (.xo file) for use in software emulation (sw_emu). Refer to [Compiling C/C++ PL Kernels for Software Emulation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=kqb1693589259529) for more information. -4. `v++ -l` links the compiled kernel with the target platform and generates the FPGA binary (.xclbin file). Refer to [Linking the System](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=mjs1528399150499) for more information. +1. `g++` compiles the host application using the standard GNU C compiler. Refer to [Building the Software Application](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=asy1528754332783.html) for more information. +2. `emconfigutil` generates an emulation configuration file which defines the device type and quantity of devices to emulate for the specified platform. Refer to [emconfigutil](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=nrj1570599837825.html) for more information. +3. `v++ -c -k vadd` compiles the source code for the vector-add accelerator into a compiled kernel object (.xo file) for use in software emulation (sw_emu). Refer to [Compiling C/C++ PL Kernels for Software Emulation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=kqb1693589259529.html) for more information. +4. `v++ -l` links the compiled kernel with the target platform and generates the FPGA binary (.xclbin file). Refer to [Linking the System](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=mjs1528399150499.html) for more information. The `-t` option of the `v++` command specifies the build target. Here it is set to `sw_emu`, so you are building for software emulation. diff --git a/Getting_Started/Vitis/Part4-embedded_platform.md b/Getting_Started/Vitis/Part4-embedded_platform.md index c9f9bc6595..ab969c848a 100644 --- a/Getting_Started/Vitis/Part4-embedded_platform.md +++ b/Getting_Started/Vitis/Part4-embedded_platform.md @@ -13,15 +13,15 @@ ## Part 4: Build and Run the Embedded Processor Application - In this fourth part of the Introduction to Vitis tutorial, you will compile and run the vector-add example using each of three build targets supported in the Vitis flow as described below. The overall flow is described in [Introduction to Vitis Tools for Embedded System Designers](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=pkl1657651602103), and includes the image flow diagram shown below. From the image you can see the G++ cross-compiler for building the host application for the Arm processor, and the use of the Vitis compiler (`v++`) for building the AMD device binary (`xclbin`). These are the steps you will be working through in this lab. + In this fourth part of the Introduction to Vitis tutorial, you will compile and run the vector-add example using each of three build targets supported in the Vitis flow as described below. The overall flow is described in [Introduction to Vitis Tools for Embedded System Designers](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=pkl1657651602103.html), and includes the image flow diagram shown below. From the image you can see the G++ cross-compiler for building the host application for the Arm processor, and the use of the Vitis compiler (`v++`) for building the AMD device binary (`xclbin`). These are the steps you will be working through in this lab. ![img](./images/embedded_processor_flow.png) -* Software Emulation: The kernel code is compiled to run on an emulation environment (QEMU) version of the embedded processor. The software emulation target allows quick iterative algorithm refinement through fast build-and-run loops. This target is useful for identifying syntax errors, performing source-level debugging of the kernel code running together with application, and verifying the behavior of the system. Refer to [Software Emulation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=xvc1504034328357) for more information. +* Software Emulation: The kernel code is compiled to run on an emulation environment (QEMU) version of the embedded processor. The software emulation target allows quick iterative algorithm refinement through fast build-and-run loops. This target is useful for identifying syntax errors, performing source-level debugging of the kernel code running together with application, and verifying the behavior of the system. Refer to [Software Emulation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=using-software-emulation-xvc1504034328357.html) for more information. -* Hardware Emulation: The kernel code is compiled into a hardware model (RTL), which is run in the Vivado logic simulator. The host application runs on an emulation environment (QEMU) version of the embedded processor. This build-and-run loop takes longer but provides a detailed, cycle-accurate view of kernel activity. This target is useful for testing the functionality of the logic that will go in the FPGA and getting initial performance estimates. Refer to [Hardware Emulation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=ldh1504034328524) for more information. +* Hardware Emulation: The kernel code is compiled into a hardware model (RTL), which is run in the Vivado logic simulator. The host application runs on an emulation environment (QEMU) version of the embedded processor. This build-and-run loop takes longer but provides a detailed, cycle-accurate view of kernel activity. This target is useful for testing the functionality of the logic that will go in the FPGA and getting initial performance estimates. Refer to [Hardware Emulation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=using-hardware-emulation-ldh1504034328524.html) for more information. -* Hardware: The kernel code is compiled into a hardware model (RTL) and then implemented on the FPGA, resulting in a binary that will run on the actual FPGA. In the Embedded Processor platform, the host application, xclbin, and required support files are written to an SD card (for instance) and then used to boot and configure the system. Refer to [System Hardware Target](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=prg1504034328691) for more information. +* Hardware: The kernel code is compiled into a hardware model (RTL) and then implemented on the FPGA, resulting in a binary that will run on the actual FPGA. In the Embedded Processor platform, the host application, xclbin, and required support files are written to an SD card (for instance) and then used to boot and configure the system. Refer to [System Hardware Target](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=building-for-target-fpga-platform-prg1504034328691.html) for more information. ## Building and Running on ZCU102 Zynq MPSoC Embedded Processor Platform @@ -73,14 +73,14 @@ v++ -p -t sw_emu --platform xilinx_zcu102_base_202320_1 --config ../../src/zcu10 Here is a brief explanation of each of these four commands: 1. `$CXX` compiles the host application using the Arm cross-compiler. This variable contains the full compiler executable plus flags relevant to cross-compilation, and is set when you source the software development kit (SDK) environment setup script. Refer to [Building the Software Application](https://docs.xilinx.com/r/en-US/ug1393-vitis-application-acceleration/Building-the-Software-Application) for more information. This should resolve to `$XILINX_VITIS/gnu/aarch64/lin/aarch64-linux/bin/aarch64-linux-gnu-g++`. -2. `v++ -c -k vadd` compiles the source code for the vector-add accelerator into a compiled kernel object (.xo file) for software emulation. Note that this is a different command than is required for compiling the C++ code for hardware emulation or hardware. Refer to [Compiling PL Kernels for Software Emulation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=kqb1693589259529) for more information. -3. `v++ -l` links the compiled kernel with the target platform and generates the FPGA binary (.xclbin file). Refer to [Linking the System](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=mjs1528399150499) for more information. -4. `v++ -p` packages the host executable, the rootfs, the FPGA binary and a few other files and generates a bootable image. Refer to [Packaging for Embedded Platforms](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=hqh1586367334583) for more information. +2. `v++ -c -k vadd` compiles the source code for the vector-add accelerator into a compiled kernel object (.xo file) for software emulation. Note that this is a different command than is required for compiling the C++ code for hardware emulation or hardware. Refer to [Compiling PL Kernels for Software Emulation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=kqb1693589259529.html) for more information. +3. `v++ -l` links the compiled kernel with the target platform and generates the FPGA binary (.xclbin file). Refer to [Linking the System](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=mjs1528399150499.html) for more information. +4. `v++ -p` packages the host executable, the rootfs, the FPGA binary and a few other files and generates a bootable image. Refer to [Packaging for Embedded Platforms](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=hqh1586367334583.html) for more information. There are two important differences to take note of here between building for Data Center accelerator cards and building for Embedded Platforms. * The first is the use of the `v++ --package` command. This is a required step in the Embedded Processor platform flow and is largely optional in the Data Center flow, except in the case of Versal devices. The Data Center application runs in the X86 environment, and loads the xclbin from disk. However, in the Embedded Platform flow, generally, the processor must be booted from an SD card, and the `--package` option gathers the files and generates the SD card. -* The second is the `emconfigutil` command. This command is used in the Data Center flow to build an emulation version of the hardware platform. However, in the Embedded Platform flow, the embedded processor requires the use of an emulation environment (QEMU) as described in [Simulating the Application with the Emulation Flow](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=btg1600442263101). In this flow, you will use a `launch_emulation` script rather than the emulation platform. +* The second is the `emconfigutil` command. This command is used in the Data Center flow to build an emulation version of the hardware platform. However, in the Embedded Platform flow, the embedded processor requires the use of an emulation environment (QEMU) as described in [Simulating the Application with the Emulation Flow](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=btg1600442263101.html). In this flow, you will use a `launch_emulation` script rather than the emulation platform. The `-t` option of the `v++` command specifies the build target. Here it is set to `sw_emu` so you are building for software emulation. @@ -101,9 +101,9 @@ Building for software emulation is quick and should not take more than a few min ./package/launch_sw_emu.sh -forward-port 1440 22 ``` -This command will launch software emulation, start the Quick Emulation (QEMU) environment and initiate the boot sequence. Refer to [launch_emulator Utility](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=qao1584149423414) for more information. +This command will launch software emulation, start the Quick Emulation (QEMU) environment and initiate the boot sequence. Refer to [launch_emulator Utility](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=qao1584149423414.html) for more information. ->**IMPORTANT**: You must use the `-forward-port` option as shown above in order to later retrieve files from the QEMU environment as described in [Running Emulation on an Embedded Processor Platform](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=lei1600364954309). +>**IMPORTANT**: You must use the `-forward-port` option as shown above in order to later retrieve files from the QEMU environment as described in [Running Emulation on an Embedded Processor Platform](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=lei1600364954309.html). When Linux has finished booting, enter the following commands from within the QEMU environment to run the example program: @@ -130,7 +130,7 @@ If you look at the directory contents for the `zcu104/sw_emu` directory, you sho * **xrt.ini**: The runtime initilization file. * **xrt.run_summary**: A summary report of the events of the application runtime. -These files and reports are the results of the build and run process targeting the software emulation build. You will be taking a closer look at some of these files in Part 5 of this tutorial. To examine these files later, you must retrieve them from the QEMU environment and copy them into your local system. You can do this using the `scp` command as described in [Running Emulation on an Embedded Processor Platform](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=lei1600364954309). +These files and reports are the results of the build and run process targeting the software emulation build. You will be taking a closer look at some of these files in Part 5 of this tutorial. To examine these files later, you must retrieve them from the QEMU environment and copy them into your local system. You can do this using the `scp` command as described in [Running Emulation on an Embedded Processor Platform](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=lei1600364954309.html). This command must be run from a Linux shell, outside of the QEMU environment. For example: @@ -181,7 +181,7 @@ export XCL_EMULATION_MODE=hw_emu You should see messages that say `TEST PASSED` indicating that the run completed successfully. -Running the application in the QEMU generates some report files during the run. These files and reports are the results of the run process targeting the software emulation build. You will be taking a closer look at some of these files in Part 5 of this tutorial. To examine these files later, you must retrieve them from the QEMU environment and copy them into your local system. You can do this using the `scp` command as described in [Running Emulation on an Embedded Processor Platform](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=lei1600364954309). +Running the application in the QEMU generates some report files during the run. These files and reports are the results of the run process targeting the software emulation build. You will be taking a closer look at some of these files in Part 5 of this tutorial. To examine these files later, you must retrieve them from the QEMU environment and copy them into your local system. You can do this using the `scp` command as described in [Running Emulation on an Embedded Processor Platform](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=lei1600364954309.html). This command must be run from a Linux shell, outside of the QEMU environment. For example: diff --git a/Getting_Started/Vitis/Part4-unified-ide.md b/Getting_Started/Vitis/Part4-unified-ide.md index aee8e22b58..d5ac16a7e9 100644 --- a/Getting_Started/Vitis/Part4-unified-ide.md +++ b/Getting_Started/Vitis/Part4-unified-ide.md @@ -13,7 +13,7 @@ ## Part 4: Build and Run with the Vitis unified IDE -This lab introduces the new Vitis unified IDE as described in [Introduction to Vitis unified IDE](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=svk1630656618393). The unified IDE provides a single tool for end-to-end application development, without the need to jump between multiple tools for design, debug, integration and analysis. +This lab introduces the new Vitis unified IDE as described in [Introduction to Vitis unified IDE](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=svk1630656618393.html). The unified IDE provides a single tool for end-to-end application development, without the need to jump between multiple tools for design, debug, integration and analysis. **NOTE:** The following text assumes you have setup the environment as instructed in [Part 2: Installation and Configuration](./Part2.md). @@ -36,7 +36,7 @@ Use the **File > New Component > HLS** to create a new HLS component. This opens 2. For the **Component location** specify the workspace which is the default value 3. Click Next to open the *Configuration File* page -The *Configuration File* lets you specify commands for building and running the HLS component as described in [*HLS Config File Commands*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=azw1690243984459). You can specify a new empty file, an existing config file, or generate a config file from an existing HLS project as described in [*Creating an HLS Component*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=yzz1661583719823). +The *Configuration File* lets you specify commands for building and running the HLS component as described in [*HLS Config File Commands*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=azw1690243984459.html). You can specify a new empty file, an existing config file, or generate a config file from an existing HLS project as described in [*Creating an HLS Component*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=yzz1661583719823.html). ![HLS Component](./images/unified-hls-component2.png) @@ -59,7 +59,7 @@ After adding the file you can see fields for adding CFLAGS and CSIMFLAGS for all 10. For **flow_target** select the `Vitis Kernel Flow` 11. For **package.output.format** specify `Generate a Vitis XO` to create .xo output`. -The default clock uncertainty, when it is not specified, is 27% of the clock period. For more information, refer to [Specifying the Clock Frequency](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=ycw1585572210561) +The default clock uncertainty, when it is not specified, is 27% of the clock period. For more information, refer to [Specifying the Clock Frequency](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=ycw1585572210561.html) 12. Click **Next** to open the *Summary* page. Review the *Summary* page and click **Finish** to create the defined HLS component. @@ -91,7 +91,7 @@ On the *Select Domain* page you will select from the available processor domains 4. Select the `xrt` domain and click **Next** to open the *Sysroot* page. -On the *Sysroot* page you will provide a path to the sysroot as part of the common images for the selected platform. You can find more information on this at [*Installing Embedded Platforms*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=lqx1607351968855). +On the *Sysroot* page you will provide a path to the sysroot as part of the common images for the selected platform. You can find more information on this at [*Installing Embedded Platforms*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=lqx1607351968855.html). Enter the path to the Sysroot for the selected platform and click **Next** to open the *Summary* page. @@ -103,14 +103,14 @@ In the Vitis Components Explorer view expand the `host` component, right-click t After adding it, you can select the `host.cpp` file in the Vitis Components Explorer to open it in the Code Editor in the central editor window. This example shows the simplest way of using XRT API to interact with the hardware accelerator. -Having added the source code to the component, you are now ready to compile the code. Looking at the Flow Navigator with the Application component the active component, you can see there are Build commands under X86 Simulation and Hardware. For Data Center applications, these two are essentially the same as the Application component runs on the X86 processor for both Hardware and Emulation. However, for Embedded Processor-based platforms, these are two different build configurations. For software emulation, even though the platform uses an embedded processor, emulation is run on the x86 processor as described in [*Embedded Processor Emulation Using PS on x86*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=vfp1662765605490). For hardware emulation, or to run on hardware, the Application component must be compiled for the embedded processor domain. These Build choices reflect that requirement. +Having added the source code to the component, you are now ready to compile the code. Looking at the Flow Navigator with the Application component the active component, you can see there are Build commands under X86 Simulation and Hardware. For Data Center applications, these two are essentially the same as the Application component runs on the X86 processor for both Hardware and Emulation. However, for Embedded Processor-based platforms, these are two different build configurations. For software emulation, even though the platform uses an embedded processor, emulation is run on the x86 processor as described in [*Embedded Processor Emulation Using PS on x86*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=vfp1662765605490.html). For hardware emulation, or to run on hardware, the Application component must be compiled for the embedded processor domain. These Build choices reflect that requirement. 6. After the `host.cpp` is imported, click the **Build** command to build the application for X86 Simulation or for Hardware. ### Creating the System Project -The System project is where the different components that you have built so far are integrated into a single system as described in [*Creating a System Project for Heterogeneous Computing*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=zhh1630894738303). The HLS component and the Application component are integrated into the system project using the following steps. +The System project is where the different components that you have built so far are integrated into a single system as described in [*Creating a System Project for Heterogeneous Computing*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=zhh1630894738303.html). The HLS component and the Application component are integrated into the system project using the following steps. 1. From the main menu select **File > New Component > System Project** @@ -122,14 +122,14 @@ This opens the *Select Platform* page. 3. On the Select Part page select the `xilinx_zcu102_base_202310_1` platform and click **Next** to open the Embedded Component Paths page. -The Embedded Component Paths page lets you specify the path to the Sysroot, RootFS, and Image for the embedded processor platform as described at [*Installing Embedded Platforms*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=lqx1607351968855). Enter the following choices and click **Next** to proceed: +The Embedded Component Paths page lets you specify the path to the Sysroot, RootFS, and Image for the embedded processor platform as described at [*Installing Embedded Platforms*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=lqx1607351968855.html). Enter the following choices and click **Next** to proceed: ``` Kernel Image: /Image Root FS: /rootfs.ext4 Sysroot: /sysroots/cortexa72-cortexa53-xilinx-linux ``` -**TIP:** You can enable the `Update Workspace Preference` checkbox to add the settings to any component or project that uses the specified platform as explained in [*Embedded Component Paths*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=ztg1661787911900). +**TIP:** You can enable the `Update Workspace Preference` checkbox to add the settings to any component or project that uses the specified platform as explained in [*Embedded Component Paths*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=ztg1661787911900.html). 4. Review the Summary page and click **Finish** to create the defined System project. @@ -137,7 +137,7 @@ The System project `vitis-sys.json` file is opened in the center editor, and the ![Unified IDE - System Project Binary](./images/unified-system-project.png) -After creating the System project, you need to configure it. You must define which of the components in the current workspace should be added to the System. Then you can define the hardware linking options used by the `v++ --link` command, and the packaging options used by the `v++ --package` command to build the system. Take a moment to examine the different sections of the System, Hardware Linker Settings, Package Settings, and Components. These are described in greater detail in [*Creating a System Project for Heterogeneous Computing*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=zhh1630894738303). +After creating the System project, you need to configure it. You must define which of the components in the current workspace should be added to the System. Then you can define the hardware linking options used by the `v++ --link` command, and the packaging options used by the `v++ --package` command to build the system. Take a moment to examine the different sections of the System, Hardware Linker Settings, Package Settings, and Components. These are described in greater detail in [*Creating a System Project for Heterogeneous Computing*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=zhh1630894738303.html). 5. Scroll down in the `vitis-sys.json` to the Components section at the bottom, and select the **Add Existing Component** link to add the HLS component to the System. @@ -161,7 +161,7 @@ For now, expand the `vadd` entry in the binary containers table and at the botto 9. Select the `hw_link/vadd-link.cfg` to open the Config File for the binary container. -These are commands that determine how the device binary will be generated. The Config File Editor opens and displays the *V++ linker settings*. The config file commands are described in [v++ Command](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=wrj1504034328013). Look through the available settings. In the lower half of the Config File Editor is a *Kernel Data* section that lets you specify the number of CUs for each kernels, or the naming convention applied. You can also enable profiling options for when the device is run. +These are commands that determine how the device binary will be generated. The Config File Editor opens and displays the *V++ linker settings*. The config file commands are described in [v++ Command](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=wrj1504034328013.html). Look through the available settings. In the lower half of the Config File Editor is a *Kernel Data* section that lets you specify the number of CUs for each kernels, or the naming convention applied. You can also enable profiling options for when the device is run. 10. In the Config File Editor select the **Source Editor** command to see the text form of the Config File Editor. Using the text form you can edit the config file directly. @@ -194,7 +194,7 @@ After building, you will need to create a launch configuration for the *Run* or ![Unified IDE - Launch Config](./images/unified-system-project-launch-config.png) -This will create a new launch configuration with the default name of `System_project_hw_emu_new`. You might need to setup the arguments for the launch configuration as described in [*Launching Run or Debug of the System Project*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=kmf1661584105351). You can rename the launch configuration by using the **Edit** command link next to the *Launch config name* field. Use the **Append XCLBINs** which will copy `./vadd.xclbin` to the *Cmd line args* field. You can specify other command line arguments as required by your application. +This will create a new launch configuration with the default name of `System_project_hw_emu_new`. You might need to setup the arguments for the launch configuration as described in [*Launching Run or Debug of the System Project*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=kmf1661584105351.html). You can rename the launch configuration by using the **Edit** command link next to the *Launch config name* field. Use the **Append XCLBINs** which will copy `./vadd.xclbin` to the *Cmd line args* field. You can specify other command line arguments as required by your application. 17. In the Flow Navigator click **Start Emulator** to configure and run the QEMU environment for the specified platform. diff --git a/Getting_Started/Vitis/Part5.md b/Getting_Started/Vitis/Part5.md index 687a4d43b8..75d3edcb9e 100644 --- a/Getting_Started/Vitis/Part5.md +++ b/Getting_Started/Vitis/Part5.md @@ -13,7 +13,7 @@ ## Part 5 : Visualizing Results and Analyzing Reports -Now that you have successfully built and run the vector-add example, now you can look at the results and reports generated along the way. This example is configured to generate build and run summaries for all three build targets (software emulation, hardware emulation, and hardware). Any of these summary reports can be viewed and analyzed using the Vitis analyzer tool as described in [Working with the Analysis View](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=bmv1632721179781). +Now that you have successfully built and run the vector-add example, now you can look at the results and reports generated along the way. This example is configured to generate build and run summaries for all three build targets (software emulation, hardware emulation, and hardware). Any of these summary reports can be viewed and analyzed using the Vitis analyzer tool as described in [Working with the Analysis View](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=bmv1632721179781.html). The results will be different depending on the summary or report you open. The hardware run is fully accurate, hardware emulation is a cycle-approximate simulation, and software emulation should only be used for functional considerations. Also, because the U250 and ZCU102 cards have different characteristics, the results will be different between these two targets. View the results from the platform and build target that you want to analyze: @@ -35,7 +35,7 @@ If you look into the `hw_emu` directory where you built and ran the application, * `vadd.xclbin.link_summary`: A summary report of the linking process used to generate the device binary. * `xrt.run_summary`: A summary report of the events captured during the application runtime. ->**IMPORTANT:** If you targeted the ZCU102 hardware, these files are stored on the SD card and must be copied back to your workstation to continue this lab. Refer to [Running Emulation on an Embedded Processor Platform](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=lei1600364954309) for more information. +>**IMPORTANT:** If you targeted the ZCU102 hardware, these files are stored on the SD card and must be copied back to your workstation to continue this lab. Refer to [Running Emulation on an Embedded Processor Platform](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=lei1600364954309.html) for more information. The generation of these files and reports is controlled by runtime options located in the `xrt.ini` file. This tutorial contains a pre-existing `xrt.ini` file which enables the generation a timeline of execution, and the profile summary data, with the following content: @@ -55,7 +55,7 @@ vitis -a ./hw_emu vitis_analyzer ./hw_emu ``` ->**NOTE:** The vitis_analyzer command has been updated to open the Analysis view of the Vitis Unified IDE, and loads the run summary as described in [Working with the Analysis View](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=bmv1632721179781). +>**NOTE:** The vitis_analyzer command has been updated to open the Analysis view of the Vitis Unified IDE, and loads the run summary as described in [Working with the Analysis View](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=bmv1632721179781.html). The tool examines the specific folder or workspace, and determines the summary reports to display in the Analysis view. It displays a list of the found reports and lets you choose which reports to open, as shown in the following figure. diff --git a/Getting_Started/Vitis/README.md b/Getting_Started/Vitis/README.md index cb5182d464..d00824ad74 100644 --- a/Getting_Started/Vitis/README.md +++ b/Getting_Started/Vitis/README.md @@ -19,9 +19,9 @@ Welcome to the Vitis Getting Started tutorial. The Vitis tool provides a unified flow for developing FPGA accelerated application targeted to either Data Center accelerator cards or Embedded Processor platforms. If you are looking to learn more about the Vitis application acceleration development flow in order to get started with FPGA acceleration, you have come to the right place. This tutorial is divided into three separate flows: -* The [Embedded System Design flow](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=pkl1657651602103) -* The [Data Center Acceleration flow](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=fvi1642629875790) -* The [Vitis unified IDE flow](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=svk1630656618393) +* The [Embedded System Design flow](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=pkl1657651602103.html) +* The [Data Center Acceleration flow](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=fvi1642629875790.html) +* The [Vitis unified IDE flow](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=svk1630656618393.html) These flows use the same host applications and accelerated kernel source code, but have differences in the build and implementation of the systems. Use the Embedded System design flow if you are working with an AMD Adaptive SoC device such as AMD Versal™, or Data Center Acceleration if you are working with an AMD Alveo™ accelerator card, and use the Vitis unified IDE flow if you are interested in working with the latest version of the Vitis tools. @@ -52,9 +52,9 @@ The Vitis unified software platform provides a framework for developing and deli A Vitis accelerated application consists of two distinct components: a software program running on a standard processor such as an X86 processor, or ARM embedded processor, and a AMD device binary (`xclbin`) containing hardware accelerated functions, or kernels. -* The software program, or host application, is written in C/C++ and runs on a conventional CPU. The software program uses the [XRT native API](https://xilinx.github.io/XRT/master/html/index.html) implemented by the AMD Runtime library (XRT) to interact with the acceleration kernel in the AMD device. A description of the host application and required API calls can be found in the Vitis documentation under [Writing the Software Application](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=vpy1519742402284). +* The software program, or host application, is written in C/C++ and runs on a conventional CPU. The software program uses the [XRT native API](https://xilinx.github.io/XRT/master/html/index.html) implemented by the AMD Runtime library (XRT) to interact with the acceleration kernel in the AMD device. A description of the host application and required API calls can be found in the Vitis documentation under [Writing the Software Application](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=vpy1519742402284.html). -* The hardware accelerated kernels can be written in C/C++ or RTL (Verilog or VHDL) and run within the programmable logic part of the AMD device. Refer to [Developing PL Kernels using C++](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=rjk1519742919747), or [Packaging RTL Kernels](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=qnk1504034323350) in the Vitis documentation for coding requirements. The kernels are integrated with a Vitis hardware platform using standard AXI interfaces. +* The hardware accelerated kernels can be written in C/C++ or RTL (Verilog or VHDL) and run within the programmable logic part of the AMD device. Refer to [Developing PL Kernels using C++](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=rjk1519742919747.html), or [Packaging RTL Kernels](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=creating-rtl-kernels-qnk1504034323350.html) in the Vitis documentation for coding requirements. The kernels are integrated with a Vitis hardware platform using standard AXI interfaces. ![img](./images/part1_execution_model.png) @@ -82,7 +82,7 @@ The Vitis build process follows a standard compilation and linking process for b * The host program is built using the GNU C++ compiler (g++) for Data Center applications or the GNU C++ Arm cross-compiler for Embedded Processor devices. -* The FPGA binary is built using the Vitis compiler (v++). First the kernels are compiled into a AMD object (.xo) file. Then, the .xo files are linked with the hardware platform to generate the AMD device binary (.xclbin) file. As described in [V++ Command](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=wrj1504034328013), the Vitis compiler and linker accepts a wide range of options to tailor and optimize the results. +* The FPGA binary is built using the Vitis compiler (v++). First the kernels are compiled into a AMD object (.xo) file. Then, the .xo files are linked with the hardware platform to generate the AMD device binary (.xclbin) file. As described in [V++ Command](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=wrj1504034328013.html), the Vitis compiler and linker accepts a wide range of options to tailor and optimize the results. ![img](./images/part1_build_flow.png) @@ -96,7 +96,7 @@ The Vitis compiler provides three different build targets: two emulation targets * Hardware: The kernel code is compiled into a hardware description language (RTL), and then synthesized and implemented for a target AMD device, resulting in a binary (`xclbin`) file that will run on the actual FPGA. ->**TIP**: As described in [Simulating the Application with the Emulation Flow](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=btg1600442263101), there are significant differences in the build and runtime environments between Data Center and Embedded Processor platforms. These two flows will be discussed in detail in the following sections. +>**TIP**: As described in [Simulating the Application with the Emulation Flow](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=btg1600442263101.html), there are significant differences in the build and runtime environments between Data Center and Embedded Processor platforms. These two flows will be discussed in detail in the following sections. ## Next Steps diff --git a/Getting_Started/Vitis_HLS/README.md b/Getting_Started/Vitis_HLS/README.md index 6f59d5a499..125117c5cf 100644 --- a/Getting_Started/Vitis_HLS/README.md +++ b/Getting_Started/Vitis_HLS/README.md @@ -23,7 +23,7 @@ ## Introduction -Vitis High-Level Synthesis (HLS) lets you compile C/C++ code into RTL code for implementation in the programmable logic (PL) region of AMD devices. It is the tool that performs high-level synthesis of the C/C++ code and exports it as either a Vivado IP (.zip) for use in the Vivado Design Suite and the Embedded Software development flow, or as a Vitis kernel (.xo) for use in the Vitis acceleration flow and heterogeneous system designs. Although the Vitis kernel and Vivadp IP flows are similar, there are some fundamental differences as explained in [Introduction to Vitis HLS Components](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=tgc1661815832870). This tutorial demonstrates the Vitis unified IDE flow for the bottom-up development of HLS designs. +Vitis High-Level Synthesis (HLS) lets you compile C/C++ code into RTL code for implementation in the programmable logic (PL) region of AMD devices. It is the tool that performs high-level synthesis of the C/C++ code and exports it as either a Vivado IP (.zip) for use in the Vivado Design Suite and the Embedded Software development flow, or as a Vitis kernel (.xo) for use in the Vitis acceleration flow and heterogeneous system designs. Although the Vitis kernel and Vivadp IP flows are similar, there are some fundamental differences as explained in [Introduction to Vitis HLS Components](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=tgc1661815832870.html). This tutorial demonstrates the Vitis unified IDE flow for the bottom-up development of HLS designs. ### Before You Begin @@ -31,11 +31,11 @@ Vitis High-Level Synthesis (HLS) lets you compile C/C++ code into RTL code for i The labs in this tutorial use: * BASH Linux shell commands. -* 2023.1 Vitis core development kit release. +* 2023.2 Vitis core development kit release. >**IMPORTANT:** > -> * Before running any of the examples, make sure you have installed the Vitis core development kit as described in [Installation](https://docs.xilinx.com/r/en-US/ug1393-vitis-application-acceleration/Installation-Requirements) in the Application Acceleration Development flow of the Vitis Unified Software Platform Documentation (UG1416). +> * Before running any of the examples, make sure you have installed the Vitis core development kit as described in [Installation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=vhc1571429852245.html) in the Application Acceleration Development flow of the Vitis Unified Software Platform Documentation (UG1416). >* If you run applications on the AMD Alveo™ Data Center accelerator cards, ensure the card and software drivers have been correctly installed by following the instructions To complete installation, follow the instructions on the [Alveo Product Documentation tab](https://www.xilinx.com/products/boards-and-kits/alveo.html). ### Setup the environment to run Vitis @@ -43,7 +43,7 @@ The labs in this tutorial use: To configure the environment to run Vitis, run the following scripts which set up the environment to run in a specific command shell. ```bash -source /Vitis/2023.1/settings64.sh +source /Vitis/2023.2/settings64.sh source /opt/xilinx/xrt/setup.sh ``` diff --git a/Getting_Started/Vitis_HLS/unified-dataflow_design.md b/Getting_Started/Vitis_HLS/unified-dataflow_design.md index 8a9d5ecb70..431d144a37 100644 --- a/Getting_Started/Vitis_HLS/unified-dataflow_design.md +++ b/Getting_Started/Vitis_HLS/unified-dataflow_design.md @@ -13,9 +13,9 @@ # 4. Reviewing the DATAFLOW Optimization -As stated in [Abstract Parallel Programming Model for HLS](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=kvc1662736907763), in order to achieve high performance hardware the HLS compiler must infer parallelism from sequential code and exploit it to achieve greater performance. The DATAFLOW optimization tries to create task-level parallelism where possible between the various functions in the code, on top of the loop-level parallelism of pipelining. +As stated in [Abstract Parallel Programming Model for HLS](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=kvc1662736907763.html), in order to achieve high performance hardware the HLS compiler must infer parallelism from sequential code and exploit it to achieve greater performance. The DATAFLOW optimization tries to create task-level parallelism where possible between the various functions in the code, on top of the loop-level parallelism of pipelining. -In the earlier steps, you found different ways to optimize the DCT algortithm so that you could achieve an II=1 with the pipelined loops. In this step, you use the DATAFLOW directive to enable task-level parallelism for functions or loops. For more information, refer to [syn.directive.dataflow](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=nzf1677218684169) for more information. +In the earlier steps, you found different ways to optimize the DCT algortithm so that you could achieve an II=1 with the pipelined loops. In this step, you use the DATAFLOW directive to enable task-level parallelism for functions or loops. For more information, refer to [syn.directive.dataflow](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=nzf1677218684169.html) for more information. ## Clone Component for Design Exploration @@ -40,9 +40,9 @@ You can specify a new component name to create a clone of the selected component 6. Rerun synthesis and review the reports. -Notice that the Synthesis Summary report now displays a negative value in the Slack column, indicating a potential timing violation in the generated RTL design. As described in [Running Implementation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=stb1677606118821), the HLS compiler reports the results of high-level synthesis providing an estimate of the results with projected clock frequencies, timing, and resource utilization (LUTs, DSPs, BRAMs, etc). However, these results are only estimates because the tool cannot know what optimizations or routing delays will be in the final synthesized or implemented design. A more accurate estimate of the resources and timing of the RTL design can be provided by runing the design through synthesis or implementation in the Vivdao Design Suite. You will do this shortly to check the timing of the design. +Notice that the Synthesis Summary report now displays a negative value in the Slack column, indicating a potential timing violation in the generated RTL design. As described in [Running Implementation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=stb1677606118821.html), the HLS compiler reports the results of high-level synthesis providing an estimate of the results with projected clock frequencies, timing, and resource utilization (LUTs, DSPs, BRAMs, etc). However, these results are only estimates because the tool cannot know what optimizations or routing delays will be in the final synthesized or implemented design. A more accurate estimate of the resources and timing of the RTL design can be provided by runing the design through synthesis or implementation in the Vivdao Design Suite. You will do this shortly to check the timing of the design. -You should also notice the addition of the Dataflow Viewer report as a result of adding the Dataflow directive. However, as explained in [Dataflow Viewer](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=twx1584322463297), you must run C/RTL Co-simulation in order to get details from the dataflow design. Examine the Dataflow Viewer report prior to running Co-simulation, and then again after. First you should configure the Co-simulation to perform as you want. +You should also notice the addition of the Dataflow Viewer report as a result of adding the Dataflow directive. However, as explained in [Dataflow Viewer](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=twx1584322463297.html), you must run C/RTL Co-simulation in order to get details from the dataflow design. Examine the Dataflow Viewer report prior to running Co-simulation, and then again after. First you should configure the Co-simulation to perform as you want. ## Run C/RTL Co-Simulation diff --git a/Getting_Started/Vitis_HLS/unified-optimization_techniques.md b/Getting_Started/Vitis_HLS/unified-optimization_techniques.md index edf18b1b86..3b059b3cc8 100644 --- a/Getting_Started/Vitis_HLS/unified-optimization_techniques.md +++ b/Getting_Started/Vitis_HLS/unified-optimization_techniques.md @@ -49,9 +49,9 @@ Another possible optimization is to tell the tool that a function or loop should This configuration might be an acceptable response to II violations when the loops are not in the critical path of the design, or they represent a small problem relative to some larger problems that must be resolved. In other words, not all violations need to be resolved, and in some cases, not all violations can be resolved. They are simply artifacts of performance. -7. In the Settings Form of the Config File Editor go to the bottom of the categories on the left side and go to **Design Directives > Pipeline**. This lets you manage the [hls.syn.directive.pipeline](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=tjy1677219494422) in your design. +7. In the Settings Form of the Config File Editor go to the bottom of the categories on the left side and go to **Design Directives > Pipeline**. This lets you manage the [hls.syn.directive.pipeline](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=tjy1677219494422.html) in your design. -8. Click **Add Item** under Pipeline. This opens the `dct.cpp` source code for the HLS component, and also opens the Directive editor as decribed in [Adding Pragmas and Directives](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=gip1583519972576). +8. Click **Add Item** under Pipeline. This opens the `dct.cpp` source code for the HLS component, and also opens the Directive editor as decribed in [Adding Pragmas and Directives](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=gip1583519972576.html). 9. In the **HLS Directive** view, select the `dct_2d` function, and click '+' to add a directive or pragma. This opens the **Add Directive** dialog box as shown in the following figure. @@ -68,7 +68,7 @@ This configuration might be an acceptable response to II violations when the loo In some designs, a Guidance message `Unable to schedule load operation...` indicates a load/load (or read/read conflict) issue with memory transactions. In these cases rather than accepting the latency, you could try to optimize the implementation to achieve the best performance (II=1). -The specific problem of reading or writing to memory can possibly be addressed by increasing the available memory ports to read from, or to write to. One approach is to use the BIND_STORAGE pragma or directive to specify the type of device resource to use in implementing the storage. BIND_STORAGE defines a specific device resource for use in implementing a storage structure associated with a variable in the RTL. For more information, refer to [BIND_STORAGE](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=imo1677218583234). +The specific problem of reading or writing to memory can possibly be addressed by increasing the available memory ports to read from, or to write to. One approach is to use the BIND_STORAGE pragma or directive to specify the type of device resource to use in implementing the storage. BIND_STORAGE defines a specific device resource for use in implementing a storage structure associated with a variable in the RTL. For more information, refer to [BIND_STORAGE](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=imo1677218583234.html). Looking at the **Storage Report** section of the Synthesis report you can see that the tool has implemented the `buf_2d_in` variable with a `ram_s2p`. This allows reading on one port while writing on the other. But the RAM_2P allows simultaneous reading on both ports, or reading on one and writing on the other. This might offer some performance improvement. @@ -83,7 +83,7 @@ Looking at the **Storage Report** section of the Synthesis report you can see th **ACTION:** Back out the prior change before proceeding. -Another approach to solve memory port conflicts is to use the `Array_Partition` directive to reconfigure the structure of an array. `Array_Partition` lets you partition an array into smaller arrays or into individual registers instead of one large array. This effectively increases the amount of read and write ports for the storage and potentially improves the throughput of the design. However, `Array_Partition` also requires more memory instances or registers, and so increases area and resource consumption. For more information, refer to [ARRAY_PARTITION](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=muz1677218527052). +Another approach to solve memory port conflicts is to use the `Array_Partition` directive to reconfigure the structure of an array. `Array_Partition` lets you partition an array into smaller arrays or into individual registers instead of one large array. This effectively increases the amount of read and write ports for the storage and potentially improves the throughput of the design. However, `Array_Partition` also requires more memory instances or registers, and so increases area and resource consumption. For more information, refer to [ARRAY_PARTITION](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=muz1677218527052.html). 16. In the Config Editor select **Add Item** for **Array Partition** to open the Directive Editor. In the HLS Directive view navigate to the `dct` function, select the `buf_2d_out` variable, and select **Add Directive**. 17. In the Add Directive dialog box select the **ARRAY_PARTITION** pragma, specify **type** of `cyclic` and **factor** of `8`, and click **OK** to add the directive or pragma to your design. diff --git a/Getting_Started/Vitis_HLS/unified_ide_project.md b/Getting_Started/Vitis_HLS/unified_ide_project.md index ce440b5006..a5155a490b 100644 --- a/Getting_Started/Vitis_HLS/unified_ide_project.md +++ b/Getting_Started/Vitis_HLS/unified_ide_project.md @@ -40,7 +40,7 @@ The Vitis unified IDE opens displaying the Welcome page. Use the **File > New Co 4. For the **Component location** specify the workspace (default value) 5. Click Next to open the *Configuration File* page -The *Configuration File* lets you specify commands for building and running the HLS component as described in [*HLS Config File Commands*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=azw1690243984459). You can specify a new empty file, an existing config file, or generate a config file from an existing HLS project as described in [*Creating an HLS Component*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=yzz1661583719823). +The *Configuration File* lets you specify commands for building and running the HLS component as described in [*HLS Config File Commands*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=azw1690243984459.html). You can specify a new empty file, an existing config file, or generate a config file from an existing HLS project as described in [*Creating an HLS Component*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=yzz1661583719823.html). ![HLS Component](./images/unified-hls-component2.png) @@ -61,11 +61,11 @@ In this tutorial, you are working with a simple discrete cosine transform (DCT) * `in.dat` provides the input values to be processed by the kernel. * `out.golden.dat` provides known output results to use for comparing the output of the dct function against. -Writing a good testbench can greatly increase your productivity because C functions execute in orders of magnitude faster than RTL simulations. Using C to develop and validate the algorithm before synthesis is much faster than developing and debugging RTL code. For more information, refer to [*Writing a Testbench*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=sav1584759936384). +Writing a good testbench can greatly increase your productivity because C functions execute in orders of magnitude faster than RTL simulations. Using C to develop and validate the algorithm before synthesis is much faster than developing and debugging RTL code. For more information, refer to [*Writing a Testbench*](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=sav1584759936384.html). 10. Click **Next** to open the the *Select Part* page to select the default part and click **Next** to open the *Settings* page. -11. On the *Settings* page, under `clock` specify `8ns` for the period, and `12%` for the `clock_uncertainty` to override the default values. The default clock uncertainty, when it is not specified, is 27% of the clock period. For more information, refer to [Specifying the Clock Frequency](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=ycw1585572210561) +11. On the *Settings* page, under `clock` specify `8ns` for the period, and `12%` for the `clock_uncertainty` to override the default values. The default clock uncertainty, when it is not specified, is 27% of the clock period. For more information, refer to [Specifying the Clock Frequency](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=ycw1585572210561.html) 12. Select the `Vitis Kernel Flow Target`, and specify `Generate a Vitis XO` for the `package.output.format`. diff --git a/Getting_Started/Vitis_Libraries/README.md b/Getting_Started/Vitis_Libraries/README.md index d5520b06c2..e82530a317 100644 --- a/Getting_Started/Vitis_Libraries/README.md +++ b/Getting_Started/Vitis_Libraries/README.md @@ -16,7 +16,7 @@ This tutorial focuses on how to leverage the AMD Vitis™ Libraries to build you ## Before You Begin ### Setup Environment -Before playing with the libraries, set up the Vitis environment first. For instructions on setting up the Vitis environment, refer to [Setting Up the Vitis Environment](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=zks1565446519267). +Before playing with the libraries, set up the Vitis environment first. For instructions on setting up the Vitis environment, refer to [Setting Up the Vitis Environment](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=zks1565446519267.html). Below are the example scripts to set up Vitis and XRT: ``` @@ -110,7 +110,7 @@ dsp/ In this step, you are going to create an HLS component by using the files provided in the [1Dfix_impluse](https://github.com/Xilinx/Vitis_Libraries/tree/main/dsp/L1/examples/1Dfix_impluse) L1 examples of the Vitis `dsp` library. The source files and script file are all located under this folder. Here, it is assumed that you have cloned the Vitis Libraries into */Vitis_Libraries* directory. -1. Go into the `/Vitis_libraries/dsp/L1/examples/1Dfix_impluse` folder, create a directory to use as a workspace, and launch the Vitis unified IDE to create an HLS component as described in [Building and Running an HLS Component](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=aeg1676136124434). +1. Go into the `/Vitis_libraries/dsp/L1/examples/1Dfix_impluse` folder, create a directory to use as a workspace, and launch the Vitis unified IDE to create an HLS component as described in [Building and Running an HLS Component](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1399-vitis-hls&resourceid=aeg1676136124434.html). ``` mkdir myProject diff --git a/Hardware_Acceleration/Design_Tutorials/01-convolution-tutorial/README.md b/Hardware_Acceleration/Design_Tutorials/01-convolution-tutorial/README.md index 3ad0e9c953..afdd772e42 100755 --- a/Hardware_Acceleration/Design_Tutorials/01-convolution-tutorial/README.md +++ b/Hardware_Acceleration/Design_Tutorials/01-convolution-tutorial/README.md @@ -8,7 +8,7 @@ # Accelerating Video Convolution Filtering Application -***Version: Vitis 2023.1*** +***Version: Vitis 2023.2*** This tutorial introduces you to a compute-intensive application that is accelerated using the AMD Alveo™ Data Center accelerator card. It goes through the design of a specific kernel that runs on the field programmable gate array (FPGA) and briefly discusses optimization of the host-side application for performance. The kernel is designed to maximize throughput, and the host application is optimized to transfer data in an effective manner that moves in-between the host and FPGA card. The host application essentially eliminates the data movement latency by overlapping data transfers for multiple kernel calls. Another essential purpose of this tutorial is to show **how one can easily estimate the performance of hardware kernels that can be built using Vitis HLS and how accurate and close these estimates are to actual hardware performance**. diff --git a/Hardware_Acceleration/Design_Tutorials/01-convolution-tutorial/lab3_build_app_kernel.md b/Hardware_Acceleration/Design_Tutorials/01-convolution-tutorial/lab3_build_app_kernel.md index fd31bf0d0b..d3ce0a07b7 100755 --- a/Hardware_Acceleration/Design_Tutorials/01-convolution-tutorial/lab3_build_app_kernel.md +++ b/Hardware_Acceleration/Design_Tutorials/01-convolution-tutorial/lab3_build_app_kernel.md @@ -294,11 +294,9 @@ The trace information generated during the application run can be controlled by 1. After the design has been run; you can open the run time profile summary report using the following steps: ```bash - vitis_analyzer ./build/xrt.run_summary + vitis -a ./build/xrt.run_summary ``` ->**NOTE:** In the 2023.1 release this command opens the Analysis view of the new Vitis Unified IDE and loads the run summary as described in [Working with the Analysis View](https://docs.xilinx.com/r/en-US/ug1393-vitis-application-acceleration/Working-with-the-Analysis-View). You can navigate to the various reports using the left pane of the Analysis view or by clicking on the links provided in the summary report. -> 2. After the Vitis Analyzer tool opens, select **Profile Summary** from the left-side menu, and then select **Compute Unit Utilization** from the window displayed on the right-hand side. The report will display stats about the measured performance of the compute units. You have built the `.xclbin` with three compute units, so the display will appear as shown below: diff --git a/Hardware_Acceleration/Design_Tutorials/02-bloom/README.md b/Hardware_Acceleration/Design_Tutorials/02-bloom/README.md index 4fde4fbcd5..5ec84ff8fa 100644 --- a/Hardware_Acceleration/Design_Tutorials/02-bloom/README.md +++ b/Hardware_Acceleration/Design_Tutorials/02-bloom/README.md @@ -8,7 +8,7 @@ # Optimizing Accelerated FPGA Applications: Bloom Filter Example -***Version: Vitis 2023.1*** +***Version: Vitis 2023.2*** ## Introduction @@ -29,7 +29,7 @@ In general, a Bloom filter application has use cases in data analytics, such as The labs in this tutorial use: - BASH Linux shell commands. -- 2023.1 Vitis core development kit release and the *xilinx_u200_gen3x16_xdma_2_202110_1* platform. If necessary, it can be easily ported to other versions and platforms. +- 2023.2 Vitis core development kit release and the *xilinx_u200_gen3x16_xdma_2_202110_1* platform. If necessary, it can be easily ported to other versions and platforms. This tutorial guides you to run the designed accelerator on the FPGA; therefore, the expectation is that you have an AMD Alveo™ U200 Data Center accelerator card set up to run this tutorial. Because it can take several (six or seven) hours to generate the multiple `xclbin` files needed to run the accelerator, pregenerated `xclbin` files are provided for the U200 card. To use these pregenerated files, when building the hardware kernel or running the accelerator on hardware, you need to add the `SOLUTION=1` argument. diff --git a/Hardware_Acceleration/Design_Tutorials/03-rtl_stream_kernel_integration/README.md b/Hardware_Acceleration/Design_Tutorials/03-rtl_stream_kernel_integration/README.md index 82cffd2085..c2f9e63412 100755 --- a/Hardware_Acceleration/Design_Tutorials/03-rtl_stream_kernel_integration/README.md +++ b/Hardware_Acceleration/Design_Tutorials/03-rtl_stream_kernel_integration/README.md @@ -11,7 +11,7 @@ # Mixed Kernels Design Tutorial with AXI Stream and Vitis -***Version: Vitis 2023.1*** +***Version: Vitis 2023.2*** This tutorial demonstrate the design flow for an example mixed kernels hardware design, which includes both register transfer level (RTL) kernel and HLS C kernels, as well as the Vitis Vision Library. The design generates a real-time clock image, resizes it, then alpha-mixes it with an input image in global memory, finally output the result image to global memory. The AXI4-Stream interface is used for the kernel-to-kernel connection. @@ -89,7 +89,7 @@ The *rtc_gen* kernel has three bus interfaces: + AXI4-Lite master interface for font library data loading + AXI4-Stream master interface for clock digit image output -The kernel is composed of three blocks: *rtc_gen_axi_read_master* for AXI master-based font library reading, *rtc_gen_control_s_axi* for AXI slave-based kernel arguments and control, and *rtc_gen_core* for core kernel function and AXI4-Stream output. *rtc_gen_axi_read_master* is a standard block generated by the Vitis/Vivado RTL Kernel Wizard. *rtc_gen_control_s_axi* is also a generated block, but you need to make some modifications to it to add time value read-out function. +The kernel is composed of three blocks: *rtc_gen_axi_read_master* for AXI master-based font library reading, *rtc_gen_control_s_axi* for AXI slave-based kernel arguments and control, and *rtc_gen_core* for core kernel function and AXI4-Stream output. ![rtc_gen Block](./doc/images/rtc_gen_block.png) @@ -199,7 +199,7 @@ Before going through the following steps, do not forget to source the XRT and Vi ~~~ source /opt/xilinx/xrt/setup.sh -source /opt/xilinx/Vitis/2023.1/settings64.sh +source /opt/xilinx/Vitis/2023.2/settings64.sh ~~~ The two test programs need to display images. If you are using remote server, use VNC desktop, or ssh connection with X11 forwarding along with local X11 server. diff --git a/Hardware_Acceleration/Design_Tutorials/04-traveling-salesperson/README.md b/Hardware_Acceleration/Design_Tutorials/04-traveling-salesperson/README.md index cefcf9d6da..276587309b 100644 --- a/Hardware_Acceleration/Design_Tutorials/04-traveling-salesperson/README.md +++ b/Hardware_Acceleration/Design_Tutorials/04-traveling-salesperson/README.md @@ -14,7 +14,7 @@ # The Traveling Salesperson Problem -***Version: Vitis 2023.1*** +***Version: Vitis 2023.2*** ## Introduction @@ -41,7 +41,7 @@ The execution could take over a minute for 13 cities depending on your CPU, and The labs in this tutorial use: * BASH Linux shell commands. -* 2023.1 Vitis core development kit release and the *xilinx_u200_gen3x16_xdma_2_202110_1* platform. If necessary, it can be easily ported to other versions and platforms. +* 2023.2 Vitis core development kit release and the *xilinx_u200_gen3x16_xdma_2_202110_1* platform. If necessary, it can be easily ported to other versions and platforms. >**IMPORTANT:** > @@ -53,7 +53,7 @@ The labs in this tutorial use: To configure the environment to run Vitis, run the following scripts which set up the environment to run in a specific command shell. ```bash -source /Vitis/2023.1/settings64.sh +source /Vitis/2023.2/settings64.sh source /opt/xilinx/xrt/setup.sh ``` diff --git a/Hardware_Acceleration/Design_Tutorials/05-bottom_up_rtl_kernel/README.md b/Hardware_Acceleration/Design_Tutorials/05-bottom_up_rtl_kernel/README.md index ca187446f3..7f7cc2ef54 100644 --- a/Hardware_Acceleration/Design_Tutorials/05-bottom_up_rtl_kernel/README.md +++ b/Hardware_Acceleration/Design_Tutorials/05-bottom_up_rtl_kernel/README.md @@ -11,7 +11,7 @@ # Bottom-up RTL Kernel Flow with Vitis for Acceleration -***Version: Vitis 2023.1*** +***Version: Vitis 2023.2*** Register transfer level (RTL) design is a traditional and important hardware accelerator development methodology for FPGA. RTL modules provide excellent flexibility and efficiency, while the design process is a time consuming and error-prone process. The Vitis unified software platform provides a mature and proven RTL kernel design methodology. With Vitis and the included the AMD Vivado™ Design Suite, you can focus on your core accelerating module, instead of spending a lot of time on integration, host-field programmable gate array (FPGA) communication, direct memory access (DMA), and other supporting tasks. @@ -45,7 +45,7 @@ The designs have been verified with the following software/hardware environment * Perl package installed for Verilog simulation (**required**) * OpenSSL library installed for hardware output validate (**required**) * GCC 7 -* Vitis: 2023.1 +* Vitis: 2023.2 * Hardware and Platform for your Alveo card (you need both the deployment and development platforms): * Alveo U200: xilinx_u200_gen3x16_xdma_2_202110_1 * Alveo U250: xilinx_u250_gen3x16_xdma_4_1_202210_1 diff --git a/Hardware_Acceleration/Design_Tutorials/06-cholesky-accel/02-System_Setup/README.md b/Hardware_Acceleration/Design_Tutorials/06-cholesky-accel/02-System_Setup/README.md index 5c5cd5a024..7bf3445aad 100644 --- a/Hardware_Acceleration/Design_Tutorials/06-cholesky-accel/02-System_Setup/README.md +++ b/Hardware_Acceleration/Design_Tutorials/06-cholesky-accel/02-System_Setup/README.md @@ -12,7 +12,7 @@ In order to proceed to the Vitis optimization part of the tutorial, you will nee ## Install the Vitis Software Platform -The [Vitis Unified Software Development Platform](https://www.xilinx.com/products/design-tools/vitis/vitis-platform.html) provides a unified programming model for accelerating Edge, Cloud, and Hybrid computing applications. To develop applications, you will need to download and install the Vitis core development kit from [Xilinx Download Center](https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vitis.html); Vitis 2023.1 will be used for this tutorial. +The [Vitis Unified Software Development Platform](https://www.xilinx.com/products/design-tools/vitis/vitis-platform.html) provides a unified programming model for accelerating Edge, Cloud, and Hybrid computing applications. To develop applications, you will need to download and install the Vitis core development kit from [Xilinx Download Center](https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vitis.html); Vitis 2023.2 will be used for this tutorial. >**NOTE:** The Vitis core development kit does not need to be installed on the same server as the Alveo Data Center accelerator card. It can be installed on a system without any cards installed if you only need for development flow, but XRT and target development platform for Alveo card must be installed to work with Vitis. @@ -27,7 +27,7 @@ To install Alveo U50 accelerator card on your server, follow the instructions in To configure the environment to run the Vitis software platform, run the following scripts, which set up the environment to run in a specific command shell. ~~~ #setup XILINX_VITIS and XILINX_VIVADO variables -source /Vitis/2023.1/settings64.sh +source /Vitis/2023.2/settings64.sh #setup XILINX_XRT source /opt/xilinx/xrt/setup.sh ~~~ diff --git a/Hardware_Acceleration/Design_Tutorials/06-cholesky-accel/03-Algorithm_Acceleration/docs/module1_baseline/README.md b/Hardware_Acceleration/Design_Tutorials/06-cholesky-accel/03-Algorithm_Acceleration/docs/module1_baseline/README.md index 0e63fe9cf7..932554930b 100644 --- a/Hardware_Acceleration/Design_Tutorials/06-cholesky-accel/03-Algorithm_Acceleration/docs/module1_baseline/README.md +++ b/Hardware_Acceleration/Design_Tutorials/06-cholesky-accel/03-Algorithm_Acceleration/docs/module1_baseline/README.md @@ -104,8 +104,6 @@ For each module of this tutorial, Vitis can be run via the GUI **or** at the com Vitis Analyzer is a graphical tool which lets you browse many aspects of the design starting from the whole system down to the details of the kernel. -In the 2023.1 release, the `vitis_analyzer` command opens the Analysis view of the new Vitis Unified IDE and loads the specified summary files as described in [Working with the Analysis View](https://docs.xilinx.com/r/en-US/ug1393-vitis-application-acceleration/Working-with-the-Analysis-View). You can navigate to the various reports using the left pane of the Analysis view or by clicking the links provided in the summary report. -
Click to expand! (instructions for Vitis Analyzer) diff --git a/Hardware_Acceleration/Design_Tutorials/06-cholesky-accel/README.md b/Hardware_Acceleration/Design_Tutorials/06-cholesky-accel/README.md index b2b1f8e6be..cc94b43540 100644 --- a/Hardware_Acceleration/Design_Tutorials/06-cholesky-accel/README.md +++ b/Hardware_Acceleration/Design_Tutorials/06-cholesky-accel/README.md @@ -8,7 +8,7 @@ ### Vitis Hardware Acceleration on Cholesky Algorithm -***Version: Vitis 2023.1*** +***Version: Vitis 2023.2*** This tutorial is divided in three sections. diff --git a/Hardware_Acceleration/Design_Tutorials/07-host-code-opt/README.md b/Hardware_Acceleration/Design_Tutorials/07-host-code-opt/README.md index a5c4041df5..39f11f6cce 100644 --- a/Hardware_Acceleration/Design_Tutorials/07-host-code-opt/README.md +++ b/Hardware_Acceleration/Design_Tutorials/07-host-code-opt/README.md @@ -8,7 +8,7 @@ # Host Code Optimization -***Version: Vitis 2023.1*** +***Version: Vitis 2023.2*** ## Introduction @@ -34,7 +34,7 @@ The following sections focus on the following specific host code optimization co This tutorial uses: * BASH Linux shell commands -* 2023.1 Vitis core development kit release and the *xilinx_u200_gen3x16_xdma_2_202110_1* platform. +* 2023.2 Vitis core development kit release and the *xilinx_u200_gen3x16_xdma_2_202110_1* platform. If necessary, it can be easily ported to other versions and platforms. >**IMPORTANT:** Before running any of the examples, make sure you have the Vitis core development kit as described in [Installation](https://docs.xilinx.com/r/en-US/ug1393-vitis-application-acceleration/Installation) in the Application Acceleration Development flow of the Vitis Unified Software Platform Documentation (UG1416). @@ -180,11 +180,9 @@ In this case, the code schedules all the buffers and lets them execute. Only at After the run completes, open the Application Timeline using the Vitis analyzer, then select the Application Timeline located in left side panel. ``` - vitis_analyzer pipeline/xrt.run_summary + vitis -a pipeline/xrt.run_summary ``` - >**NOTE:** In the 2023.1 release this command opens the Analysis view of the new Vitis Unified IDE and loads the run summary as described in [Working with the Analysis View](https://docs.xilinx.com/r/en-US/ug1393-vitis-application-acceleration/Working-with-the-Analysis-View). You can navigate to the various reports using the left pane of the Analysis view or by clicking on the links provided in the summary report. - The Application Timeline view illustrates the full run of the executable. The three main sections of the timeline are: * OpenCL API Calls diff --git a/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/README.md b/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/README.md index d1896da218..0b3d7a30e6 100644 --- a/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/README.md +++ b/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/README.md @@ -8,42 +8,42 @@ # Mixing C++ and RTL Kernels -***Version: Vitis 2023.1*** +***Version: Vitis 2023.2*** ## Introduction -In the AMD Vitis™ core development kit, an application program is split between a host application and hardware accelerated kernels. The host application is developed in C/C++ with OpenCL™ API calls. The hardware kernels, on the other hand, can be developed in C/C++, OpenCL C, or RTL. In fact, the Vitis core development kit applications can use any combination of kernels developed in the different languages. The host code is indifferent to how the kernel was developed; it uses the same function call. +In the AMD Vitis™ core development kit, an application program is split between a host application and hardware accelerated kernels. The host application is developed in C/C++, while the hardware kernels can be developed in C/C++, or RTL. The host code is indifferent to how the kernel was developed; it uses the same function calls to engage with the hardware. ## Tutorial Overview -This tutorial demonstrates an application using two kernels, one designed in C++ and the other designed in RTL, with the host code accessing the kernels in an identical manner. +This tutorial demonstrates a System project using two kernels, one designed in C++ and the other designed in RTL, with the host code accessing the kernels in an identical manner. -This tutorial is split into two parts: +This tutorial is split into two steps: -- In the first part, you will build an application (host and kernel) with one C++ based kernel. The host code, including the kernel function call, is reviewed. -- In the second part, an RTL-based kernel will be added to the application. The updated host code, including the function call to the additional kernel, is reviewed. +- In step one, you will build an application (host and kernel) with one C++ based kernel. The host code, including the kernel function call, is reviewed. +- In step two, an RTL-based kernel will be added to the application. The updated host code, including the function call to the additional kernel, is reviewed. -During both parts, the application is built using a Makefile. Software emulation is run in step one and hardware emulation is run in step two. In both steps, the generated Application Timeline is reviewed to highlight the kernels being called and run by the host application. +During both steps, the application is built using a Makefile. Software emulation is run in step one and hardware emulation is run in step two. In both steps, the generated Application Timeline is reviewed to highlight the kernels being called and run by the host application. -The host code and C++ kernel code are supplied. The RTL code is generated using the RTL Kernel Wizard. +The host code and C++ kernel code are supplied, the RTL kernel is separately developed. ## Before You Begin This tutorial uses: - BASH Linux shell commands. -- 2021.2 Vitis core development release and the *xilinx_u250_gen3x16_xdma_4_1_202210_1* platform. If necessary, it can be easily extended to other versions and platforms. +- 2023.2 Vitis core development release and the *xilinx_u250_gen3x16_xdma_4_1_202210_1* platform. If necessary, it can be easily extended to other versions and platforms. >**IMPORTANT:** > -> * Before running any of the examples, make sure that you have installed the Vitis core development kit as described in [Installation](https://docs.xilinx.com/r/en-US/ug1393-vitis-application-acceleration/Installation-Requirements) in the Application Acceleration Development flow of the Vitis Unified Software Platform Documentation (UG1393). +> * Before running any of the examples, make sure that you have installed the Vitis core development kit as described in [Installation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=vhc1571429852245.html) in the Vitis Unified Software Platform Documentation (UG1393). >* If you run applications on AMD Alveo™ Data Center accelerator cards, ensure that the card and software drivers have been correctly installed by following the instructions on the [Alveo Portfolio page](https://www.xilinx.com/products/boards-and-kits/alveo.html). Before running any of the examples, ensure that you have set up the Vitis core development kit by running the following commands. ```bash #setup Xilinx Vitis tools, XILINX_VITIS and XILINX_VIVADO will be set in this step. source /settings64.sh. for example: - source /opt/Xilinx/Vitis/2023.1/settings64.sh + source /Vitis/2023.2/settings64.sh #Setup runtime. XILINX_XRT will be set in this step source /opt/xilinx/xrt/setup.sh ``` @@ -53,7 +53,7 @@ Before running any of the examples, ensure that you have set up the Vitis core d 1. To access the reference files, type the following into a terminal: `git clone https://github.com/Xilinx/Vitis-Tutorials`. 2. Navigate to the `Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels` directory, and then access the `reference-files` directory. -## Building an Application with C++ Based Kernel +## Step 1: Building an Application with C++ Based Kernel In this step, you will build an application, consisting of host code and a C++ kernel using a makefile. For an overview on building an application, refer to the [Vitis Getting Started Tutorial](https://github.com/Xilinx/Vitis-Tutorials/tree/master/Getting_Started/Vitis) lab. @@ -65,42 +65,49 @@ The C++ based kernel adds two input vectors and generates the output result. The ./reference-files/src/kernel_cpp/ ``` -The makefile builds this kernel and adds it to the hardware platform (`xclbin`), which can be accessed by the host code. +The makefile builds this kernel and linking it with the hardware platform in the device binary (`xclbin`), which can be accessed by the host code. ### Host Code -The host code for step 1 (`host_step1.cpp`) can be found in the following directory. +The host code for step 1 (`xrt-host_step1.cpp`) can be found in the following directory. ``` ./reference-files/src/host/ ``` -It sets up the platform and defines global memory buffers and connections to the kernel. The following four important sets of OpenCL API calls in the host code are described. To view these calls, open the `host_step1.cpp` file. +It sets up the platform and defines global memory buffers and connections to the kernel. The following four important sets of XRT API calls in the host code are described. To view these calls, open the `xrt-host_step1.cpp` file. -- The first set of code, on lines 189-191, creates the program to execute. It uses the binary container, which contains only the C++ based kernel. +- The first set of code, on lines 20-29, define the device binary file (.xclbin) to load. This first lab uses the binary container that only contains the C++ based kernel. The struicture of this lets you speciy the .xclbin on the command line when running th ehost, or it is inferred from the default naming when no .xclbin is specified. ``` - cl::Program::Binaries bins; - bins.push_back({buf,nb}); - cl::Program program(context, devices, bins); + std::string binaryFile; + std::cout << "argc = " << argc << std::endl; + for(int i=0; i < argc; i++){ + std::cout << "argv[" << i << "] = " << argv[i] << std::endl; + } + if (argc > 1) { + binaryFile = argv[1]; + } else { + binaryFile = "./krnl_vadd.sw_emu.xclbin"; + } ``` -- The second set of code, on line 195, gets the C++ krnl_vadd kernel object from the program, and assigns the name *krnl_vector_add.* It allows the kernel to be used by the host. +- The second set of code, on line 41, gets the C++ krnl_vadd kernel object from the program, and assigns the name *krnl* to the object. This allows the kernel to be used by the host. ``` - cl::Kernel krnl_vector_add(program,"krnl_vadd"); + auto krnl = xrt::kernel(device, uuid, "krnl_vadd", xrt::kernel::cu_access_mode::exclusive); ``` -- The third set of code, on lines 213-216, assigns the *krnl_vector_add* kernel arguments to the buffers. +- The third set of code, on lines 43-46, assigns the *krnl* kernel arguments to device side buffers to store data needed by, or generated by the kernel. ``` - krnl_vector_add.setArg(0,buffer_a); - krnl_vector_add.setArg(1,buffer_b); - krnl_vector_add.setArg(2,buffer_result); - krnl_vector_add.setArg(3,DATA_SIZE); + std::cout << "Allocate Buffer in Global Memory\n"; + auto boIn1 = xrt::bo(device, vector_size_bytes, krnl.group_id(0)); //Match kernel arguments to RTL kernel + auto boIn2 = xrt::bo(device, vector_size_bytes, krnl.group_id(1)); + auto boOut = xrt::bo(device, vector_size_bytes, krnl.group_id(2)); ``` -- The argument numbers 0, 1, 2, and 3 match the argument order in the `krnl_vadd` definition found in `krnl_vadd.cpp` as follows. +- The argument numbers 0, 1, and 2 match the argument order in the `krnl_vadd` definition found in `krnl_vadd.cpp` as follows. >**NOTE:** Arguments `a` and `b` are inputs, and `c` is an output. @@ -112,13 +119,14 @@ It sets up the platform and defines global memory buffers and connections to the const int n_elements) ``` -- Finally, on line 220, the following OpenCL API launches the *krnl_vector_add* kernel. +- Finally, on line 70, the API runs the *krnl* object, and on line 71 it waits for the kernel object to complete. ``` - q.enqueueTask(krnl_vector_add); + auto run = krnl(boIn1, boIn2, boOut, DATA_SIZE); //DATA_SIZE=size + run.wait(); ``` -For complete details on host code programming, refer to [Developing Applications](https://docs.xilinx.com/r/en-US/ug1393-vitis-application-acceleration/Developing-Applications) in the Application Acceleration Development flow of the Vitis Unified Software Platform Documentation (UG1393). +For complete details on host code programming, refer to [Writing the Software Application](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=vpy1519742402284.html) in the Application Acceleration Development flow of the Vitis Unified Software Platform Documentation (UG1393). ### Build the Application @@ -144,7 +152,7 @@ To run software emulation on the design, set the XCL_EMULATION_MODE environment ```bash export XCL_EMULATION_MODE=sw_emu - ./host krnl_vadd.sw_emu.xilinx_u250_gen3x16_xdma_4_1_202210_1.xclbin + ./host_1 krnl_vadd.sw_emu.xclbin ``` When the application successfully completes, the following message is displayed in the Console window. @@ -153,20 +161,18 @@ To run software emulation on the design, set the XCL_EMULATION_MODE environment ### Review the Application Timeline -Review the Application Timeline generated during software emulation to visualize the host events and the kernel running. +Review the Timeline Trace generated during software emulation to visualize the host events and the kernel running. -1. To view the Application Timeline, use the Vitis analyzer by running the following command from within the `run1` directory. +1. To view the Timeline Trace report use the Analysis view in the Vitis unified IDE by running the following command: ``` - vitis_analyzer xrt.run_summary + vitis -a xrt.run_summary ``` ->**NOTE:** In the 2023.1 release, this command opens the Analysis view of the new Vitis Unified IDE and loads the run summary as described in [Working with the Analysis View](https://docs.xilinx.com/r/en-US/ug1393-vitis-application-acceleration/Working-with-the-Analysis-View). You can navigate to the various reports using the left pane of the Analysis view or by clicking on the links provided in the summary report. +2. Click on the **Timeline Trace** in the Analysis view as shown in the folowing figure to open the report. +![Image:Application Timeline 1](images/xrt-host-step1-timeline.png) -2. Click on the **Application Timeline** option on the left to bring up the Application Timeline. -![Image:Application Timeline 1](images/mixing-c-rtl-kernels_timeline_one_kernel_vitis.PNG) - -3. After reviewing, close the Application Timeline window. +3. After reviewing, close the Vitis unified IDE. >**NOTE:** A CU is an instantiation of the kernel on the FPGA. #### Putting it All Together @@ -181,106 +187,58 @@ make all TARGET=sw_emu LAB=run1 export XCL_EMULATION_MODE=sw_emu # Run software emulation -./host krnl_vadd.sw_emu.xilinx_u250_gen3x16_xdma_4_1_202210_1.xclbin +./host_1 krnl_vadd.sw_emu.xclbin # View Application Timeline Trace in Vitis Analyzer -vitis_analyzer xrt.run_summary +vitis -a xrt.run_summary ``` -## Building an Application with C++ and RTL-Based Kernels - -Now that you have successfully built and run an application with a C++ based kernel, update the application to include an RTL-based kernel. - -Similar to the previous section, build, emulate, and review the generated Application Timeline. Regardless of how the kernels were designed, as HLS C/C++ kernels or as RTL kernels, after the kernel has been built the host application accesses the accelerated kernels through the same function calls. - -### RTL-Based Kernel - -First, create and package an RTL-based kernel using the RTL Kernel Wizard. By default, the wizard creates a kernel to increment by one. This kernel is used in this tutorial. Additionally, the wizard automates the steps needed to package the RTL design into a kernel object file (XO). - -Generate the RTL-based kernel by quickly going through the RTL Kernel Wizard steps (at a high-level). Review the [Getting Started with RTL Kernels](https://github.com/Xilinx/Vitis-Tutorials/tree/master/Hardware_Acceleration/Feature_Tutorials/01-rtl_kernel_workflow) tutorial for more information. For complete details refer to [RTL Kernels](https://docs.xilinx.com/r/en-US/ug1393-vitis-application-acceleration/RTL-Kernels) in the Application Acceleration Development flow of the Vitis Unified Software Platform Documentation (UG1393). - -#### Create the Vitis Project - -1. To open the Vitis IDE, enter `vitis` in the command line. -2. Select **./mixing-c-rtl-kernels/workspace** as the workspace directory, and click **Launch**. -3. From the `Welcome` screen, select **Create Application Project** to open the `New Project` wizard. -4. The first page displays a summary of the process. Click **Next** to proceed. -5. From the `Platform` page select the **xilinx_u250_gen3x16_xdma_4_1_202210_1** platform and click **Next**. -6. From the `Application Project Details` page, name your project `rtl_project` and click **Next**. -7. Under SW Acceleration Templates, select **Empty Application** and click **Finish**. This creates a Vitis IDE project. - -Next, generate an RTL-based kernel from within the Vitis IDE. - -1. Select the menu command **Vitis > Launch RTL Kernel Wizard > rtl_project_kernels**. This opens the RTL Kernel Wizard Welcome page. -2. The first page is a summary of the process. Review it and click **Next**. -3. In the General Settings dialog box, keep all the default settings, and click **Next**. -4. In the Scalars dialog box, set the number of scalar arguments to `0`, and click **Next**. -5. In the Global Memory dialog box, keep all the default settings, and click **Next**. -6. In the Streaming Interfaces dialog box, keep all the default settings, and click **Next**. -The Summary dialog box is displayed and provides a summary of the RTL kernel settings and includes a function prototype which conveys what a kernel call would look like as a C function. -7. Click **OK**. +## Step 2: Building an Application with C++ and RTL-Based Kernels -The RTL Kernel source files have now been created. +Now that you have successfully built and run an application with a C++ based kernel, update the hardware design to also include an RTL-based kernel. For this tutorial, the RTL kernel is a simple +1 adder. The packaged RTL kernel is provided for your use in the System project at `./src/rtl_kernel/rtl_kernel_wizard_0.xo`. Similar to the previous section, build, emulate, and review the generated Timeline Trace report. Regardless of how the kernels were designed, as HLS C/C++ kernels or as RTL kernels, the host application accesses the PL kernels through the same XRT native API calls. -#### The Vivado Design Suite Project - -At this point, the AMD Vivado™ Design Suite opens a project automatically with the generated RTL code corresponding to the default `A = A + 1` function. You can navigate to review the source files or even run RTL simulation. However, for this tutorial, do not modify the default RTL Kernel and will only package into an object file (`.xo`). - -1. In Flow Navigator, click **Generate RTL Kernel**. -![Generate RTL Kernel](images/mixing-c-rtl-kernels_flow_navigator.png) -2. In the **Generate RTL Kernel** dialog box, select the **Sources-only** packaging option. -3. For **Software Emulation Sources**, you can add a C++ model of the RTL kernel, which is used for Software Emulation. - - The C++ model must be coded by the design engineer. Typically, there is no C++ model available, and Hardware Emulation is used to test the design. Because the RTL Wizard creates a C++ model of the vadd design, the steps to add this file are also provided below. - -4. Click the **Browse** command (`...`). -5. Double-click the `imports` directory. -6. Select the `rtl_kernel_wizard_0_cmodel.cpp` file and click **OK**. -7. To generate the RTL kernel, click **OK**. -8. After the RTL kernel has been generated successfully, click **Yes** to exit the Vivado Design Suite, and return to the Vitis IDE. -9. A message window displays some information related to the generated RTL kernel. Review it and click **OK**. -10. Exit the Vitis IDE. - - At this point, you have packaged the RTL kernel into the following object file, `rtl_kernel_wizard_0.xo` found in the following directory. - - ``` - ./02-mixing-c-rtl-kernels/workspace/rtl_project_kernels/src/vitis_rtl_kernel/rtl_kernel_wizard_0 - ``` +For a tutorial on packaging an RTL kernel review the [Getting Started with RTL Kernels](https://github.com/Xilinx/Vitis-Tutorials/tree/master/Hardware_Acceleration/Feature_Tutorials/01-rtl_kernel_workflow) tutorial. For complete details refer to [Packaging RTL Kernels](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=qnk1504034323350.html) in the Vitis Unified Software Platform Documentation (UG1393). #### Host Code Updates -To access the RTL-based kernel, the host code needs to be updated. The updates have been done in the `host_step2.cpp` file located in the following directory. +To access the RTL-based kernel, the host code needs to be updated. The updates have been done in the `xrt-host_step2.cpp` file located in the following directory. ``` ./reference-files/src/host/ ``` -The updates includes additional OpenCL API calls briefly described below. The additional OpenCL API calls are identical to the ones used for the C++ based kernel with the arguments changed for the RTL-based kernel. +The updates includes additional XRT API calls briefly described below. The additional API calls are identical to the ones used for the C++ based kernel with the arguments changed for the RTL-based kernel. ``` - cl::Program::Binaries bins; - bins.push_back({buf,nb}); - cl::Program program(context, devices, bins); + std::string binaryFile; + std::cout << "argc = " << argc << std::endl; + for(int i=0; i < argc; i++){ + std::cout << "argv[" << i << "] = " << argv[i] << std::endl; + } + if (argc > 1) { + binaryFile = argv[1]; + } else { + binaryFile = "./krnl_vadd.hw_emu.xclbin"; + } ``` -The following code gets the `rtl_kernel_wizard_0` object from the program and assigns the name *krnl_const_add* on line 198. The `rtl_kernel_wizard_0` object name matches the name of the kernel you generated with the RTL Wizard. +The following code gets the `rtl_kernel_wizard_0` object from the device binary (`.xclbin`) and assigns the name *krnlRTL* on line 41. The `rtl_kernel_wizard_0` object name matches the name of the RTL kernel. ``` -cl::Kernel krnl_const_add(program,"rtl_kernel_wizard_0"); + auto krnlRTL = xrt::kernel(device, uuid, "rtl_kernel_wizard_0"); ``` -Next, define the krnl_const_add kernel arguments on line 219. ->**NOTE:** In the host code, the buffer `buffer_result` is passed directly from the C kernel to the RTL kernel through DDR without being moved back to the host memory. +>**NOTE:** In the host code, the `boOut` buffer is passed directly from the C++ kernel to the RTL kernel through DDR without being moved back to the host memory. This results in better performance, and allows the buffer to be shared between the two kernels. This occurs when running the kernels as seen on lines 70 to 75. ``` -krnl_const_add.setArg(0,buffer_result); + std::cout << "Execution of the vadd kernel\n"; + auto run1 = krnl(boIn1, boIn2, boOut, DATA_SIZE); //DATA_SIZE=size + run1.wait(); + std::cout << "Execution of the RTL kernel\n"; + auto run2 = krnlRTL(boOut); + run2.wait(); ``` -Launch the krnl_const_add kernel on line 222. - -``` -q.enqueueTask(krnl_const_add); -``` #### Build and Emulation with C++ and RTL Based Kernels @@ -299,20 +257,20 @@ With the RTL-based kernel added and host code updated, build the application, ta ```bash export XCL_EMULATION_MODE=hw_emu - ./host krnl_vadd.hw_emu.xilinx_u250_gen3x16_xdma_4_1_202210_1.xclbin + ./host_2 krnl_vadd.hw_emu.xclbin ``` 5. View the **Application Timeline** report in the Vitis analyzer. ``` - vitis_analyzer xrt.run_summary + vitis -a xrt.run_summary ``` 6. Under **Device**>**Binary Container**, traverse along the timeline and zoom in. You will now see both CUs, krnl_vadd_1 and rtl_kernel_wizard_0_1, show as *running*. -![Application Timeline 2](images/mixing-c-rtl-kernels_timeline_two_kernels_vitis.PNG) +![Timeline 2](images/xrt-host-step2-timeline.png) -7. After reviewing, close the Application Timeline and exit Vitis analyzer. +7. After reviewing, close the Analysis view and the Vitis unified IDE. Vitis core development kit applications can use any combination of kernels, regardless of the language in which they were developed. @@ -320,16 +278,16 @@ Because a CPP emulation file was packaged with the RTL Kernel (through the RTL W ```bash # Build the application - make all TARGET=sw_emu + make all TARGET=sw_emu LAB=run2 # Set XCL_EMULATION_MODE environment variable for software emulation export XCL_EMULATION_MODE=sw_emu # Run software emulation -./host krnl_vadd.sw_emu.xilinx_u250_gen3x16_xdma_4_1_202210_1.xclbin +./host krnl_vadd.sw_emu.xclbin # Open Vitis analyzer and view the timeline waveform -vitis_analyzer xrt.run_summary +vitis -a xrt.run_summary ``` ## Next Steps diff --git a/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/images/mixing-c-rtl-kernels_timeline_one_kernel_vitis.png b/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/images/mixing-c-rtl-kernels_timeline_one_kernel_vitis.png new file mode 100644 index 0000000000000000000000000000000000000000..9e074e34e5541eabe3c98841bb80f5611371dbd5 GIT binary patch literal 101388 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%0Ay^77eQU^R7iEvl_KEpIYTwI*s(^2qNk_l?d=VD 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 literal 0 HcmV?d00001 diff --git a/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/images/xrt-host-step1-timeline.png b/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/images/xrt-host-step1-timeline.png new file mode 100644 index 0000000000000000000000000000000000000000..9a922ce1fe794ad224eb62c3afab9e334ed8963f GIT binary patch literal 69046 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

`2MUVg=p>E3SHl} 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 literal 0 HcmV?d00001 diff --git a/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/images/xrt-host-step2-timeline.png b/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/images/xrt-host-step2-timeline.png new file mode 100644 index 0000000000000000000000000000000000000000..c9e241ca721336c01eb2af3172dd3494ee090b73 GIT binary patch literal 107362 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 z504�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 KOZuDNt$zYA99i4| literal 0 HcmV?d00001 diff --git a/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/reference-files/Makefile b/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/reference-files/Makefile index 09c292d84e..d8218eb3c3 100644 --- a/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/reference-files/Makefile +++ b/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/reference-files/Makefile @@ -18,31 +18,32 @@ help: TARGET := hw_emu DEVICE := xilinx_u250_gen3x16_xdma_4_1_202210_1 LAB := run1 -EXECUTABLE := host -XO := krnl_vadd.$(TARGET).$(DEVICE).xo -XCLBIN := krnl_vadd.$(TARGET).$(DEVICE).xclbin +ifeq ($(TARGET),sw_emu) + XO := krnl_vadd.sw_emu.xo +else + XO := krnl_vadd.hw.xo +endif + +XCLBIN := krnl_vadd.$(TARGET).xclbin + +#Locate RTL Kernel RTL_KRNL := ./src/rtl_kernel/rtl_kernel_wizard_0.xo # Host building global settings -CXXFLAGS += -I$(XILINX_XRT)/include/ -I$(XILINX_VIVADO)/include/ -Wall -O0 -g -std=c++11 -L$(XILINX_XRT)/lib/ -lOpenCL -pthread -lrt -lstdc++ -CXXFLAGS2 := -lOpenCL +CXXFLAGS += -g -std=c++17 -Wall -O0 # Kernel compiler & linker global settings -#CLFLAGS := -t $(TARGET) --platform $(DEVICE) --config compile.cfg -#LDCLFLAGS := -t $(TARGET) --platform $(DEVICE) --config link.cfg -CLFLAGS := -t $(TARGET) --platform $(DEVICE) -g +CLFLAGS := -t $(TARGET) --platform $(DEVICE) ifeq ($(LAB),$(filter $(LAB),run1)) -LDCLFLAGS := -t $(TARGET) --platform $(DEVICE) --config run1.cfg + EXECUTABLE := host_1 + LDCLFLAGS := -t $(TARGET) --platform $(DEVICE) --config run1.cfg else -LDCLFLAGS := -t $(TARGET) --platform $(DEVICE) --config run2.cfg + EXECUTABLE := host_2 + LDCLFLAGS := -t $(TARGET) --platform $(DEVICE) --config run2.cfg endif -#LDCLFLAGS += --profile.data:all:all:all -#LDCLFLAGS += --profile.stall:all:all:all -#LDCLFLAGS += --profile.exec:all:all:all - all: $(EXECUTABLE) $(XO) $(XCLBIN) emconfig exe: $(EXECUTABLE) @@ -51,31 +52,31 @@ xclbin: $(XO) $(XCLBIN) # Building kernel $(XO): ./src/kernel_cpp/krnl_vadd.cpp - v++ $(CLFLAGS) -c -k krnl_vadd -I'$( +#include + +// XRT includes +#include "xrt/xrt_bo.h" +#include +#include "xrt/xrt_device.h" +#include "xrt/xrt_kernel.h" + +#define DATA_SIZE 4096 + +int main(int argc, char** argv) { + + std::string binaryFile; + std::cout << "argc = " << argc << std::endl; + for(int i=0; i < argc; i++){ + std::cout << "argv[" << i << "] = " << argv[i] << std::endl; + } + if (argc > 1) { + binaryFile = argv[1]; + } else { + binaryFile = "./krnl_vadd.sw_emu.xclbin"; + } + + // Read settings + int device_index = 0; + std::cout << "Open the device" << device_index << std::endl; + auto device = xrt::device(device_index); + std::cout << "Load the xclbin " << binaryFile << std::endl; + auto uuid = device.load_xclbin(binaryFile); + + size_t vector_size_bytes = sizeof(int) * DATA_SIZE; + + //auto krnl = xrt::kernel(device, uuid, "vadd"); + auto krnl = xrt::kernel(device, uuid, "krnl_vadd", xrt::kernel::cu_access_mode::exclusive); + + std::cout << "Allocate Buffer in Global Memory\n"; + auto boIn1 = xrt::bo(device, vector_size_bytes, krnl.group_id(0)); //Match kernel arguments to RTL kernel + auto boIn2 = xrt::bo(device, vector_size_bytes, krnl.group_id(1)); + auto boOut = xrt::bo(device, vector_size_bytes, krnl.group_id(2)); + + // Map the contents of the buffer object into host memory + auto bo0_map = boIn1.map(); + auto bo1_map = boIn2.map(); + auto bo2_map = boOut.map(); + std::fill(bo0_map, bo0_map + DATA_SIZE, 0); + std::fill(bo1_map, bo1_map + DATA_SIZE, 0); + std::fill(bo2_map, bo2_map + DATA_SIZE, 0); + + // Create the test data + int bufReference[DATA_SIZE]; + for (int i = 0; i < DATA_SIZE; ++i) { + bo0_map[i] = i; + bo1_map[i] = i; + bufReference[i] = bo0_map[i] + bo1_map[i]; //Generate check data for validation + } + + // Synchronize buffer content with device side + std::cout << "synchronize input buffer data to device global memory\n"; + boIn1.sync(XCL_BO_SYNC_BO_TO_DEVICE); + boIn2.sync(XCL_BO_SYNC_BO_TO_DEVICE); + + std::cout << "Execution of the kernel\n"; + auto run = krnl(boIn1, boIn2, boOut, DATA_SIZE); //DATA_SIZE=size + run.wait(); + + // Get the output; + std::cout << "Get the output data from the device" << std::endl; + boOut.sync(XCL_BO_SYNC_BO_FROM_DEVICE); + + // Validate results + if (std::memcmp(bo2_map, bufReference, vector_size_bytes)) + throw std::runtime_error("Value read back does not match reference"); + + std::cout << "TEST WITH ONE KERNEL PASSED\n"; + return 0; +} diff --git a/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/reference-files/src/host/xrt-host_step2.cpp b/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/reference-files/src/host/xrt-host_step2.cpp new file mode 100644 index 0000000000..179547fd39 --- /dev/null +++ b/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/reference-files/src/host/xrt-host_step2.cpp @@ -0,0 +1,87 @@ +#/* +#Copyright (C) 2023, Advanced Micro Devices, Inc. All rights reserved. +#SPDX-License-Identifier: X11 +#*/ + +//#include "cmdlineparser.h" +#include +#include + +// XRT includes +#include "xrt/xrt_bo.h" +#include +#include "xrt/xrt_device.h" +#include "xrt/xrt_kernel.h" + +#define DATA_SIZE 4096 + +int main(int argc, char** argv) { + + std::string binaryFile; + std::cout << "argc = " << argc << std::endl; + for(int i=0; i < argc; i++){ + std::cout << "argv[" << i << "] = " << argv[i] << std::endl; + } + if (argc > 1) { + binaryFile = argv[1]; + } else { + binaryFile = "./krnl_vadd.hw_emu.xclbin"; + } + + // Read settings + int device_index = 0; + std::cout << "Open the device" << device_index << std::endl; + auto device = xrt::device(device_index); + std::cout << "Load the xclbin " << binaryFile << std::endl; + auto uuid = device.load_xclbin(binaryFile); + + size_t vector_size_bytes = sizeof(int) * DATA_SIZE; + + auto krnl = xrt::kernel(device, uuid, "krnl_vadd"); + auto krnlRTL = xrt::kernel(device, uuid, "rtl_kernel_wizard_0"); + + std::cout << "Allocate Buffer in Global Memory\n"; + auto boIn1 = xrt::bo(device, vector_size_bytes, krnl.group_id(0)); //Match kernel arguments to RTL kernel + auto boIn2 = xrt::bo(device, vector_size_bytes, krnl.group_id(1)); + auto boOut = xrt::bo(device, vector_size_bytes, krnl.group_id(2)); + + // Map the contents of the buffer object into host memory + auto bo0_map = boIn1.map(); + auto bo1_map = boIn2.map(); + auto bo2_map = boOut.map(); + std::fill(bo0_map, bo0_map + DATA_SIZE, 0); + std::fill(bo1_map, bo1_map + DATA_SIZE, 0); + std::fill(bo2_map, bo2_map + DATA_SIZE, 0); + + // Create the test data for krnl + int bufReference[DATA_SIZE]; + for (int i = 0; i < DATA_SIZE; ++i) { + //std::cout << "DataSize = " << i << " iteration " << std::endl; + bo0_map[i] = i; + bo1_map[i] = i; + bufReference[i] = bo0_map[i] + bo1_map[i] + 1; //Generate check data for validation, +1 for krnlRTL + } + + // Synchronize buffer content with device side + std::cout << "synchronize input buffer data to device global memory\n"; + boIn1.sync(XCL_BO_SYNC_BO_TO_DEVICE); + boIn2.sync(XCL_BO_SYNC_BO_TO_DEVICE); + + std::cout << "Execution of the vadd kernel\n"; + auto run1 = krnl(boIn1, boIn2, boOut, DATA_SIZE); //DATA_SIZE=size + run1.wait(); + std::cout << "Execution of the RTL kernel\n"; + auto run2 = krnlRTL(boOut); + run2.wait(); + + // Get the output; + std::cout << "Get the output data from the device" << std::endl; + boOut.sync(XCL_BO_SYNC_BO_FROM_DEVICE); + + // Validate results + if (std::memcmp(bo2_map, bufReference, vector_size_bytes)) + throw std::runtime_error("Value read back does not match reference"); + + std::cout << "TEST PASSED\n"; + return 0; +} diff --git a/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/reference-files/xrt.ini b/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/reference-files/xrt.ini index af4c35cd23..550f5780be 100644 --- a/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/reference-files/xrt.ini +++ b/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/reference-files/xrt.ini @@ -1,3 +1,3 @@ [Debug] -opencl_trace=true +native_xrt_trace=true device_trace=fine diff --git a/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/script/run_sprite_mixing_c_rtl_kernels.sh b/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/script/run_sprite_mixing_c_rtl_kernels.sh deleted file mode 100644 index f71caffc77..0000000000 --- a/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/script/run_sprite_mixing_c_rtl_kernels.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -echo ====================================== -echo == STEP 1 -echo ====================================== -echo -# Change directory -cd ../reference-files/run1 -echo ~~~~~~~~~~~~~~~~~~~ -echo ~~ Clean -echo ~~~~~~~~~~~~~~~~~~~ -make clean -echo -echo - -echo ~~~~~~~~~~~~~~~~~~~ -echo ~~ Build application -echo ~~~~~~~~~~~~~~~~~~~ - -make all TARGET=sw_emu - -echo ~~~~~~~~~~~~~~~~~~~ -echo ~~ Run emulation -echo ~~~~~~~~~~~~~~~~~~~ -setenv XCL_EMULATION_MODE sw_emu -./host krnl_vadd.sw_emu.xilinx_u250_gen3x16_xdma_4_1_202210_1.xclbin - - diff --git a/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/script/workplace/rtl_project/src/rtl_kernel/rtl_kernel_wizard_0/rtl_kernel_wizard_0.xo b/Hardware_Acceleration/Feature_Tutorials/02-mixing-c-rtl-kernels/script/workplace/rtl_project/src/rtl_kernel/rtl_kernel_wizard_0/rtl_kernel_wizard_0.xo deleted file mode 100644 index 13672c138c8eda074c896de204d3a98b0811effc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38790 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:** > -> * Before running any of the examples, make sure you have installed the Vitis core development kit as described in [Installation](https://docs.xilinx.com/r/en-US/ug1393-vitis-application-acceleration/Installation) in the Application Acceleration Development flow of the Vitis Unified Software Platform Documentation (UG1416). +> * Before running any of the examples, make sure you have installed the Vitis core development kit as described in [Installation](https://docs.xilinx.com/access/sources/dita/topic?Doc_Version=2023.2%20English&url=ug1393-vitis-application-acceleration&resourceid=vhc1571429852245.html) in the Application Acceleration Development flow of the Vitis Unified Software Platform Documentation (UG1416). >* If you run applications on the AMD Alveo™ Data Center accelerator cards, ensure the card and software drivers have been correctly installed by following the instructions To complete installation, follow the instructions on the [Alveo Product Documentation tab](https://www.xilinx.com/products/boards-and-kits/alveo.html). ## Accessing the Tutorial Reference Files diff --git a/Hardware_Acceleration/Feature_Tutorials/03-dataflow_debug_and_optimization/fifo_sizing_and_deadlocks.md b/Hardware_Acceleration/Feature_Tutorials/03-dataflow_debug_and_optimization/fifo_sizing_and_deadlocks.md index 629a0cfd1c..05354c72c4 100755 --- a/Hardware_Acceleration/Feature_Tutorials/03-dataflow_debug_and_optimization/fifo_sizing_and_deadlocks.md +++ b/Hardware_Acceleration/Feature_Tutorials/03-dataflow_debug_and_optimization/fifo_sizing_and_deadlocks.md @@ -75,7 +75,7 @@ The goal of this tutorial is to help you analyze a dataflow design and identify Note that for complex designs, with data-dependent synchronizations (e.g., a process reads 128 times from a FIFO in one execution and 32 times in another), a process might block for a variety of reasons, that change over time. In this case, the Dataflow co-simulation waveforms might be the only viable approach for debugging — as described in the earlier lab. -As the second exercise in this tutorial, you will first synthesize the example design and bring up the dataflow viewer to show how a deadlock can be investigated and resolved. In this lab, you will look at a simple [deadlock example](./reference-files/src/deadlock/example.cpp), found in the `reference-files/deadlock` folder. +As the second exercise in this tutorial, you will first synthesize the example design and bring up the dataflow viewer to show how a deadlock can be investigated and resolved. In this lab, you will look at a simple [deadlock example](./reference_files/deadlock/example.cpp), found in the `reference-files/deadlock` folder. In this lab, you will: diff --git a/Hardware_Acceleration/Feature_Tutorials/04-mult-ddr-banks/README.md b/Hardware_Acceleration/Feature_Tutorials/04-mult-ddr-banks/README.md index fd7771d13c..0be69dce15 100644 --- a/Hardware_Acceleration/Feature_Tutorials/04-mult-ddr-banks/README.md +++ b/Hardware_Acceleration/Feature_Tutorials/04-mult-ddr-banks/README.md @@ -9,7 +9,7 @@ # Using Multiple DDR Banks -***Version: Vitis 2023.1*** +***Version: Vitis 2023.2*** ## Introduction @@ -44,7 +44,7 @@ The example in this tutorial uses a C++ kernel; however, the steps described are The labs in this tutorial use: * BASH Linux shell commands. -* 2023.1 Vitis core development kit release and the *xilinx_u250_gen3x16_xdma_4_1_202210_1* platform. If necessary, it can be easily extended to other versions and platforms. +* 2023.2 Vitis core development kit release and the *xilinx_u250_gen3x16_xdma_4_1_202210_1* platform. If necessary, it can be easily extended to other versions and platforms. >**IMPORTANT:** > @@ -70,7 +70,7 @@ Note: This tutorial showcases only hw_emu flow. If the user wants to run HW flow ```bash #setup Xilinx Vitis tools, XILINX_VITIS and XILINX_VIVADO will be set in this step. source /settings64.sh. for example: - source /opt/Xilinx/Vitis/2023.1/settings64.sh + source /opt/Xilinx/Vitis/2023.2/settings64.sh #Setup runtime. XILINX_XRT will be set in this step source /opt/xilinx/xrt/setup.sh ``` @@ -215,9 +215,8 @@ vadd_1:m_axi_gmem2-DDR[2] RD = 0.000 KB WR = 0.391 KB You can also open the `xrt.run_summary` and look at the Profile Summary to examine the **Kernel to Global Memory** section showing data transfers. ```bash - vitis_analyzer xrt.run_summary + vitis -a xrt.run_summary ``` - >**NOTE:** In the 2023.1 release, this command opens the Analysis view of the new Vitis Unified IDE and loads the run summary as described in [Working with the Analysis View](https://docs.xilinx.com/r/en-US/ug1393-vitis-application-acceleration/Working-with-the-Analysis-View). You can navigate to the various reports using the left pane of the Analysis view or by clicking on the links provided in the summary report. You will see the DDR banks assigned to each of the kernel arguments along with the traffic on each of the interfaces during HW-Emulation. diff --git a/Hardware_Acceleration/Feature_Tutorials/05-using-multiple-cu/README.md b/Hardware_Acceleration/Feature_Tutorials/05-using-multiple-cu/README.md index f589db7833..ed3b4de1a6 100644 --- a/Hardware_Acceleration/Feature_Tutorials/05-using-multiple-cu/README.md +++ b/Hardware_Acceleration/Feature_Tutorials/05-using-multiple-cu/README.md @@ -8,7 +8,7 @@ # Using Multiple Compute Units -***Version: Vitis 2023.1*** +***Version: Vitis 2023.2*** ## Introduction @@ -37,7 +37,7 @@ An OpenCV version of the host code is also provided in the source code directory This tutorial uses: * BASH Linux shell commands -* 2023.1 Vitis core development kit release and the *xilinx_u250_gen3x16_xdma_4_1_202210_1* platform. +* 2023.2 Vitis core development kit release and the *xilinx_u250_gen3x16_xdma_4_1_202210_1* platform. If necessary, it can be easily extended to other versions and platforms. >**IMPORTANT:** @@ -122,11 +122,9 @@ For hardware emulation (`hw_emu`), the kernel code is compiled into a hardware m Review the generated Timeline Trace report (`opencl_trace.csv`). ``` - vitis_analyzer xrt.run_summary + vitis -a xrt.run_summary ``` ->**NOTE:** In the 2023.1 release, this command opens the Analysis view of the new Vitis Unified IDE and loads the run summary as described in [Working with the Analysis View](https://docs.xilinx.com/r/en-US/ug1393-vitis-application-acceleration/Working-with-the-Analysis-View). Navigate to the various reports using the left pane of the Analysis view or by clicking on the links provided in the summary report. - The run directory contains a file named `xrt.ini`. This file contains runtime options that generate additional reports such as the Profile Summary report and Timeline Trace. After the Vitis analyzer loads, click **Timeline Trace** located on the left side panel. The Application Timeline report collects and displays host and device events on a common timeline to help you understand and visualize the overall health and performance of your systems. diff --git a/Hardware_Acceleration/Feature_Tutorials/06-controlling-vivado-implementation/README.md b/Hardware_Acceleration/Feature_Tutorials/06-controlling-vivado-implementation/README.md index bc60252e86..905570436f 100644 --- a/Hardware_Acceleration/Feature_Tutorials/06-controlling-vivado-implementation/README.md +++ b/Hardware_Acceleration/Feature_Tutorials/06-controlling-vivado-implementation/README.md @@ -8,7 +8,7 @@ # Controlling Vivado Implementation -***Version: Vitis 2023.1*** +***Version: Vitis 2023.2*** ## Introduction @@ -34,7 +34,7 @@ The Vitis core development kit provides two methods to control the Vivado tool f This tutorial uses: * BASH Linux shell commands -* 2023.1 Vitis core development kit release and the *xilinx_u250_gen3x16_xdma_4_1_202210_1* platform. +* 2023.2 Vitis core development kit release and the *xilinx_u250_gen3x16_xdma_4_1_202210_1* platform. If necessary, it can be easily ported to other versions and platforms. >**IMPORTANT:** diff --git a/Hardware_Acceleration/Feature_Tutorials/07-using-hbm/README.md b/Hardware_Acceleration/Feature_Tutorials/07-using-hbm/README.md index cedf77e8fe..9adae71977 100755 --- a/Hardware_Acceleration/Feature_Tutorials/07-using-hbm/README.md +++ b/Hardware_Acceleration/Feature_Tutorials/07-using-hbm/README.md @@ -8,7 +8,7 @@ # Using HBM -***Version: Vitis 2023.1*** +***Version: Vitis 2023.2*** ## Introduction @@ -21,7 +21,7 @@ This tutorial covers essential steps on migrating an existing application using The labs in this tutorial use: * BASH Linux shell commands. -* 2023.1 Vitis core development kit release and the *xilinx_u250_gen3x16_xdma_4_1_202210_1* and *xilinx_u50_gen3x16_xdma_5_202210_1* platforms. If necessary, it can be easily ported to other versions and platforms. Its also expected that you have an AMD Alveo™ Data Center accelerator card that supports DDR and HBM to run this tutorial. +* 2023.2 Vitis core development kit release and the *xilinx_u250_gen3x16_xdma_4_1_202210_1* and *xilinx_u50_gen3x16_xdma_5_202210_1* platforms. If necessary, it can be easily ported to other versions and platforms. Its also expected that you have an AMD Alveo™ Data Center accelerator card that supports DDR and HBM to run this tutorial. >**IMPORTANT:** > diff --git a/Hardware_Acceleration/Feature_Tutorials/08-using-hostmem/README.rst b/Hardware_Acceleration/Feature_Tutorials/08-using-hostmem/README.rst index edc16da44b..66c27a7383 100644 --- a/Hardware_Acceleration/Feature_Tutorials/08-using-hostmem/README.rst +++ b/Hardware_Acceleration/Feature_Tutorials/08-using-hostmem/README.rst @@ -3,7 +3,7 @@ Host Memory Access ############################################################################## -**Version:** Vitis 2023.1 +**Version:** Vitis 2023.2 Some of the recent Xilinx Platforms have an XDMA feature to bypass the DMA operation and allow the kernels to directly access the host memory. The direct host memory access provides an alternate data transfer mechanism compared to XDMA based data transfer and can be useful in some of the scenarios. @@ -23,8 +23,7 @@ XRT and Platform version The following XRT and U250 platform versions are used for this tutorial design. -**XRT Version**: 2023.1 - +**XRT Version**: 2023.2 **Platform**: xilinx_u250_gen3x16_xdma_4_1_202210_1