Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
bec125b
Doc: create AIE-MLv2 section
allyzhou Sep 16, 2025
478d103
Batch update bsp and pfm version to 2025.2
allyzhou Sep 17, 2025
79ffcf9
AIE/D/20-TDM_MIXER : Updated for 2025.2
rollinsm Sep 23, 2025
177db68
AIE/D/13-FFT-DFT: Updated for 2025.2
rollinsm Sep 23, 2025
ed034ba
AIE-ML/D/01-AIE-ML-programming: Updated for 2025.2
OTremois Sep 23, 2025
e80bcbd
AIE/D/09-ddc_chain -- Update to 2025.2
faisale-xilinx Sep 23, 2025
bd1da3b
AIE/D/15-farrow_filter -- Update to 2025.2
faisale-xilinx Sep 23, 2025
b76be6b
AIE/D/14-BITONIC: Updated for 2025.2
rollinsm Sep 23, 2025
2b06698
AIE/D/17-HOUGH_TRANSFORM -- Updated for 2025.2
rollinsm Sep 23, 2025
fa8caec
AIE/D/07-firFilter_AIEvsHLS: update Makefile to fix aiesim profile issue
Sep 23, 2025
d528c8f
AIE-ML/D/07-Channelizer-Using-Vitis-Libraries: update to 2025.2
faisale-xilinx Oct 13, 2025
4e634ae
AIE/D/02-super_sampling_rate_fir: update to 2025.2
OTremois Oct 13, 2025
f913301
ES/F/04-vitis_scripting_flows: update README.md to 2025.2
Oct 13, 2025
c6eb0fb
ES/Getting_Started: update to 2025.2
Oct 13, 2025
ac26818
AIE-ML/F/20-aiecompiler-features: Updated the README for 2025.2
OTremois Oct 13, 2025
913bcf5
AIE/F/07-AI-Engine-Floating-Point: Update README to 2025.2
OTremois Oct 13, 2025
65a7d9a
AIE/F/20-aiecompiler-features: Update README to 2025.2
OTremois Oct 13, 2025
558a4c2
AIE/F/15-post-link-recompile: Updated to 2025.2
OTremois Oct 13, 2025
73793ec
PFM/D/04: Update DFx tutorial to support 2025.1 tool chain
Oct 13, 2025
b12dbdf
AIE/AIE-ML/F/06-gemm: Update to 2025.2
Oct 14, 2025
09cc02e
GS/Vitis: rm redundant platform in .cfg
allyzhou Oct 14, 2025
a11a9d8
AIE/D/16-1M-PT-FFT: Update to 2025.2
rollinsm Oct 14, 2025
9e8b125
AIE/F/24: Update for 2025.2
xflorentw Oct 14, 2025
354160c
ES/F/Vitis_Classic_To_Unified_Migration: update to 2025.2
Oct 15, 2025
3e9f193
AIE/F/01-A-to-Z: update for 2025.2
xflorentw Oct 15, 2025
dd774ff
SYS/F/01-Vitis_Functional_Simulation -- Update to 2025.2
faisale-xilinx Oct 15, 2025
b696054
ES/F/Debugging: Update vitis version
Oct 17, 2025
50fe0ce
AIE-ML/D/02-PFA1008: Updated for 2025.2
rollinsm Oct 17, 2025
58336a3
AIE-ML/D/07-Channelizer-Using-Vitis-Libraries: update to 2025.2
faisale-xilinx Oct 20, 2025
bf7f8eb
AIE/D/11-Bilinear_Interpolation & AIE/F/25-AIE-kernel-optimization
drbuz Oct 20, 2025
1d045ac
AIE-ML/D/01-AIE-ML-programming-and-optimization: Update to 2025.2
OTremois Oct 20, 2025
e79d0dc
AIE/F/17-RTL-IP-with-AIE-Engines: Updated to account for 2025.2 relea…
f-rivo Oct 22, 2025
fbf2255
ES/F/Debugging/Cross_Triggering: Update to 2025.2
Oct 22, 2025
ebd9967
AIE-ML/F/07-tiling-parameters: update to 2025.2
OTremois Oct 22, 2025
f0c0ec8
VSD/D/02-Versal_VSS: update subtraction model
derekx76 Oct 23, 2025
be56727
GS: VEK280: Update host source code
Oct 28, 2025
1c76249
AIE-ML/F/13-aie-ml-performance-analysis: Update to 2025.2
Oct 31, 2025
2e72f22
AIE-ML/F/05: Fix for cout is not a member of std and copyright update
nismehta-amd Oct 31, 2025
5d61cf7
AIE/F/17-RTL-IP-with-AIE-Engines: update to 2025.2
f-rivo Oct 31, 2025
f3319d5
SYS/D/01&02: Update to 2025.2
derekx76 Oct 31, 2025
3528ad4
Regression: changes to makefile & addition of iostream - issue #9
saayyagari Oct 31, 2025
71f047d
Revert "Regression: changes to makefile & addition of iostream - issu…
allyzhou Oct 31, 2025
8846fc6
AIE/F/02 & AIE/F/23 : added iostream library
saayyagari Nov 2, 2025
58457f2
AIE-ML/D/02-Prime-Factor-FFT: Updated README
rollinsm Nov 5, 2025
1a45c20
PFM_D_04: VCK190 DFX: Update description file
Nov 10, 2025
902ef34
AIE/D/04-Polyphase-Channelizer: Updating for 2025.2
rollinsm Nov 10, 2025
dbae07f
ES/F/05-Vitis version control: Update to 2025.2
Nov 10, 2025
66c61ee
AIE-ML/F/13-aie-ml-performance r2: Update to 2025.2
Nov 10, 2025
a306b5e
AIE/D/12-IFFT64K-2D: Updating for 2025.2
rollinsm Nov 11, 2025
18308c1
AIE/D/05-Prime-Factor-FFT: Updating for 2025.2
rollinsm Nov 11, 2025
3f4dd1f
AIE/D/08-n-body: add on-board testing
allyzhou Nov 12, 2025
6b083e9
AIE-ML/D/03-lenet: update the README and VPP flags from LPDDR to LPDDR1
Nov 12, 2025
a70daf3
AIE/F/08-dsp-library: 2025.2 update
Nov 12, 2025
492a2ba
Regression: rm hw on-board for AIE/D/16 & 18
allyzhou Nov 12, 2025
14df873
Regression: Cleanup the outdated addon scripts for multiple tutorials
allyzhou Nov 12, 2025
4ac9843
AIE/D/07-fir: update the README for 2025.2 and profile.data to profil…
Nov 12, 2025
0dbb216
AIE/F/23AIE_Partition : Workaround for partition resource cleanup
saayyagari Nov 15, 2025
bc68f27
AIE/D/07-firFilter_AIEvsHLS/HLS: Update Makefile fix OOM issue in reg…
Nov 18, 2025
b4340b1
AIE/D/21-Back-Projection-SAR: Minor updates and clarifications for 25…
benlibby Nov 18, 2025
463e63e
AIE-ML/D/06-farrow_filter: update to 2025.2
Nov 18, 2025
f3533e7
SYS/F/01: typo
faisale-xilinx Nov 18, 2025
f0b7a06
New Tutorial: AIE/F/27-system-timeline
OTremois Nov 18, 2025
351532a
AIE/D/06-fft2d_AIEvsHLS:update the READMEfor 2025.2
Nov 18, 2025
b144fcb
AIE/D/08-n-body-simulator:update the README for 2025.2
Nov 18, 2025
f579d86
AIE/F/23-AIE_independent_graphs: updates to readme.md
saayyagari Nov 19, 2025
d538b22
SYS/D/02; PFM/F/03; AIE/F/18: Doc updates for 2025.2
derekx76 Nov 25, 2025
438722b
AIE/F/06-versalsystemclock: Readme updates for 2025.2
derekx76 Nov 25, 2025
26d0363
AIE/F/06&18; PFM/F/03; SYS/D/02: Readme updates for 2025.2
derekx76 Nov 25, 2025
aef8cff
ES/F/01-User managed mode: Update to 2025.2
Nov 26, 2025
adcf6e9
ES/F/02-Debugging/1-Debugging-Baremetal-Apps: Update to 2025.2
Nov 26, 2025
827307c
ES/F/02-Debugging: Update to 2025.2
Nov 26, 2025
832123b
AIE/D/21/SAR: version updates
rollinsm Nov 27, 2025
cebc4e5
AIE-ML/D/08/MNIST: version updates
rollinsm Nov 27, 2025
4026a5e
TDL fixes for MATLAB and Versal ACAP
dasmohana Nov 28, 2025
182fd67
AIE/D/18-MUSIC: Updated for 2025.2_web
rollinsm Nov 28, 2025
c0661c6
Doc: VHLS tutorial cleanup; link new tutorial
allyzhou Nov 28, 2025
fe5f4d0
AIE/F/14 & AIE/F/26: Updated for 2025.2
Nov 28, 2025
47e03a3
AIE/F/10-aie-dsp-lib-model-composer: Updating the Vitis Tutorial for …
SrilakshmiDegala Nov 28, 2025
c5a5098
GS/Vitis_Libraries update to 2025.2
allyzhou Nov 28, 2025
a1789c2
AIE/F/02;03;04;13;23: Updates to Readmes
saayyagari Dec 2, 2025
fa23ca6
AIE/D/01-aie_lenet: update the README and kpi,s for 2025.2 (#1451)
Dec 2, 2025
4fb3e88
AIE-ML/D/04-AIE-API-FFT: 2025.2 update
Dec 2, 2025
090647d
AIE/F/01-A-to-Z: Update to help with regression testing
xflorentw Dec 2, 2025
cce98f9
AIE/D/19, AIE/F/25, AIE-ML/D/05: Updated Vitis version in README.md
drbuz Dec 3, 2025
1ce45c0
TDL: Minor updates to catch changes for 2025.2
ryanvergel Dec 3, 2025
6b711b1
AIE/F/05 and AIE-ML/F/05 README version update
nismehta-amd Dec 3, 2025
d23a535
FPM/D/01-Edge-KV260: remove as base pfm is avaiable; version info cle…
allyzhou Dec 3, 2025
0a3bf97
AIE/D/08-n-body-simulator: update kpi's for 2025 2
Dec 3, 2025
bb5da43
GS/Vitis_Platform: Update license and documentation for latest tool
Dec 3, 2025
6e77258
AIE/F/09-debug-walkthrough: update README.md to 2025.2
Dec 3, 2025
6a7a5ac
AIE/F/11-ai-engine-emulation-waveform-analysis: update README.md for …
Dec 3, 2025
e0e1139
PFM_D_04: VCK190 DFx: Update platform creation
Dec 3, 2025
766e349
AIE/F/21_two_tone_filter: update to 2025.2
Dec 4, 2025
3f3a474
AIE-ML/D/03-AIE-ML-lenet: update kpi's for 2025 2
Dec 4, 2025
a8c463e
PFM/F/02-petalinux: Update documentation to latest tool
Dec 4, 2025
036b5c9
AIE/D/03-beamforming: update the README and source code file for 2025.2
Dec 4, 2025
85f64e1
PFM/F/04: aie/pl validation documentation update
Dec 4, 2025
108a892
AIE-ML/D/07-Channelizer-Using-Vitis-Libraries: pull down tutorial
faisale-xilinx Dec 4, 2025
46ed77f
New Tutorial: AIE-MLv2/F/: 01-a-to-z_aiemlv2 tutorial
xflorentw Dec 4, 2025
e485b03
New Tutorial: AIE-ML-v2/D/01-Radio-ML
faisale-xilinx Dec 4, 2025
ef57b23
AIE/D/02-super_sampling: Updated README to 2025.2
herveratigner Dec 5, 2025
524ee44
2025.2 Release
allyzhou Dec 5, 2025
050dfe7
AIE/D/10-GeMM_AIEvsDSP: update the readme and Kpi's for 2025.2
Dec 5, 2025
47a8210
TDL: Updated syntax and removed tutorials
ryanvergel Dec 9, 2025
07f3e72
PFM/D/02: ZCU104: Update documentation
Dec 20, 2025
abea0a6
AIE/D/06-fft2d_AIEvsHLS: documents update
Dec 20, 2025
624e450
PFM_D_04: VCK190 DFx: Update documentation for latest tool
Dec 20, 2025
57fed87
PFM_F_01: Update documentation for 2025.2
Dec 22, 2025
3a2bc6d
AIE/D/05-PFA1008: Added a throughput monitor built in hardware
rollinsm Jan 13, 2026
cd087d2
AIE-ML/D/02-PFA1008: Added a throughput monitor built in hardware
rollinsm Jan 13, 2026
6ffdd34
AIE/D/12-IFFT64K-2D: update Makefile
rollinsm Jan 13, 2026
75b47ea
AIE-ML/D/07-Channelizer-Using-Vitis-Libraries: Upload fixed design
faisale-xilinx Jan 14, 2026
949642d
AIE/D/03-beamforming: Editorial updates
lavanyadalal Jan 19, 2026
6893693
AIE-MLv2/D/01: Minor doc update
faisale-xilinx Jan 19, 2026
b779fac
Fix AIE Makefile POSIX shell compatibility
avmaris Jan 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions AI_Engine_Development/AIE-ML/AIE-ML.rst
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ The tutorials under the AI Engine for Machine Learning (AIE-ML) Development help

.. important::

Before beginning a tutorial, ensure you have installed the Vitis 2024.2 software. The Vitis release includes all the embedded base platforms, including the VEK280 base platform that is used in these tutorials. In addition, ensure you have downloaded the Common Images for Embedded Vitis Platforms from `Downloads <https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-platforms.html>`_.
Before beginning a tutorial, ensure you have installed the Vitis 2025.2 software. The Vitis release includes all the embedded base platforms, including the VEK280 base platform that is used in these tutorials. In addition, ensure you have downloaded the Common Images for Embedded Vitis Platforms from `Downloads <https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-platforms.html>`_.

The `common image` package contains a prebuilt Linux kernel and root file system that can be used with the AMD Versal™ board for embedded design development using the Vitis software platform.

Before starting a tutorial, run the following steps:

1. Go to the directory where you have unzipped the Versal Common Image package.
2. In a Bash shell, run the ``/Common Images Dir/xilinx-versal-common-v2024.2/environment-setup-cortexa72-cortexa53-amd-linux`` script. This script sets up the SDKTARGETSYSROOT and CXX variables. If the script is not present, you must run ``/Common Images Dir/xilinx-versal-common-v2024.2/sdk.sh``.
3. Set up your ROOTFS and IMAGE to point to the ``rootfs.ext4`` and Image files located in the ``/Common Images Dir/xilinx-versal-common-v2024.2`` directory.
2. In a Bash shell, run the ``/Common Images Dir/xilinx-versal-common-v2025.2/environment-setup-cortexa72-cortexa53-amd-linux`` script. This script sets up the SDKTARGETSYSROOT and CXX variables. If the script is not present, you must run ``/Common Images Dir/xilinx-versal-common-v2025.2/sdk.sh``.
3. Set up your ROOTFS and IMAGE to point to the ``rootfs.ext4`` and Image files located in the ``/Common Images Dir/xilinx-versal-common-v2025.2`` directory.
4. Set up your PLATFORM_REPO_PATHS environment variable to ``$XILINX_VITIS/base_platforms``.


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,11 @@

# AI Engine-ML Architecture




## Introduction

Versal™ AI Edge ACAPs have been develop to target any applications at the edge where balancing performance and power consumption, low latency, size and thermal constraints, and safety and reliability are paramount.
The Versal™ AI Edge Series has been develop to target any applications at the edge where balancing performance and power consumption, low latency, size and thermal constraints, and safety and reliability are paramount.

As the Versal™ AI Core series they contain also an array of SIMD VLIW DSP processors but with different functionality.
Like the Versal™ AI Core Series, it also contains an array of SIMD VLIW DSP processors but with different functionality.

![AI Engine-ML overview](images/AIE-ML-Overview.png)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ OPT ?= 0
# hw_emu|hw

TARGET ?= hw_emu
PFM_NAME := xilinx_vek280_base_202510_1
PFM_NAME := xilinx_vek280_base_202520_1
PFM_NAME := $(strip $(PFM_NAME))
PLATFORM := ${PLATFORM_REPO_PATHS}/${PFM_NAME}/${PFM_NAME}.xpfm
PNAME := aieml_pl_${TARGET}
Expand Down Expand Up @@ -97,16 +97,16 @@ guard-PLATFORM_REPO_PATHS:
$(call check_defined, PLATFORM_REPO_PATHS, Set your where you downloaded your platform)

guard-ROOTFS:
$(call check_defined, ROOTFS, Set to: xilinx-versal-common-v2025.1/rootfs.ext4)
$(call check_defined, ROOTFS, Set to: xilinx-versal-common-v2025.2/rootfs.ext4)

guard-IMAGE:
$(call check_defined, IMAGE, Set to: xilinx-versal-common-v2025.1/Image)
$(call check_defined, IMAGE, Set to: xilinx-versal-common-v2025.2/Image)

guard-CXX:
$(call check_defined, CXX, Run: xilinx-versal-common-v2025.1/environment-setup-cortexa72-cortexa53-amd-linux)
$(call check_defined, CXX, Run: xilinx-versal-common-v2025.2/environment-setup-cortexa72-cortexa53-amd-linux)

guard-SDKTARGETSYSROOT:
$(call check_defined, SDKTARGETSYSROOT, Run: xilinx-versal-common-v2025.1/environment-setup-cortexa72-cortexa53-amd-linux)
$(call check_defined, SDKTARGETSYSROOT, Run: xilinx-versal-common-v2025.2/environment-setup-cortexa72-cortexa53-amd-linux)

###
.PHONY: all_hw all_hw_emu run upd_host_hw aie postaie data aiesim aieviz aiesim-fifo compareaie x86 x86sim comparex86 allcases
Expand Down Expand Up @@ -194,11 +194,12 @@ package_${TARGET}: ${LIBADF} ${XCLBIN} ${HOST_EXE}


clean:
rm -rf _x v++_* ${XOS} ${OS} ${LIBADF} *.o.* *.o *.xpe *.xo.* \
rm -rf _x v++_* ${XOS} ${OS} ${LIBADF} *.o.* *.o *.xpe *.xo.* analyzer_input\
vek280*.xclbin* *.xsa *.log *.jou xnwOut Work Map_Report.csv \
ilpProblem* sol.db drivers .Xil *bin *BIN *.bif launch_hw_emu.sh cfg emu_qemu_scripts \
[!d]*.json *.txt *.wdb *.wcfg *.pdi v++.package_summary sim qemu_dts_files sd_card sd_card.img \
dtb_creation.sh .ipcache *summary *.sh .AIE_SIM_CMD_LINE_OPTIONS .crashReporter
[!d]*.json *.txt *.wdb *.wcfg *.pdi v++.package_summary sim qemu_dts_files \
sd_card sd_card.img \
dtb_creation.sh .ipcache *summary *.sh .AIE_SIM_CMD_LINE_OPTIONS .crashReporter baremetal_metadata_package.cpp
make -C ${AIE_DIR} clean
make -C ${KERNELS_DIR} clean
make -C ${HOST_DIR} clean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,22 @@

# AI Engine-ML Programming

***Version: Vitis 2025.1***
***Version: Vitis 2025.2***

## Introduction

>**IMPORTANT**: Before beginning the tutorial make sure you have installed the AMD Vitis™ 2025.1 software. The Vitis release includes all the embedded base platforms including the VEK280 base platform that is used in this tutorial. In addition, ensure you have downloaded the Common Images for Embedded Vitis Platforms from [this link](https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-platforms.html).
>**IMPORTANT**: Before beginning the tutorial make sure you have installed the AMD Vitis™ 2025.2 software. The Vitis release includes all the embedded base platforms including the VEK280 base platform that is used in this tutorial. In addition, ensure you have downloaded the Common Images for Embedded Vitis Platforms from [this link](https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-platforms.html).

The ‘common image’ package contains a prebuilt Linux kernel and root file system that can be used with the AMD Versal™ board for embedded design development using the Vitis software platform.

Before starting this tutorial, run the following steps:

1. Go to the directory where you have unzipped the Versal Common Image package.
2. In a Bash shell, run the ``/Common Images Dir/xilinx-versal-common-v2025.1/environment-setup-cortexa72-cortexa53-amd-linux`` script. This script sets up the SDKTARGETSYSROOT and CXX variables. If the script is not present, you must run the ``/Common Images Dir/xilinx-versal-common-v2025.1/sdk.sh``.
3. Set up your ROOTFS and IMAGE to point to the ``rootfs.ext4`` and Image files located in the ``/Common Images Dir/xilinx-versal-common-v2025.1`` directory.
2. In a Bash shell, run the ``/Common Images Dir/xilinx-versal-common-v2025.2/environment-setup-cortexa72-cortexa53-amd-linux`` script. This script sets up the SDKTARGETSYSROOT and CXX variables. If the script is not present, you must run the ``/Common Images Dir/xilinx-versal-common-v2025.2/sdk.sh``.
3. Set up your ROOTFS and IMAGE to point to the ``rootfs.ext4`` and Image files located in the ``/Common Images Dir/xilinx-versal-common-v2025.2`` directory.
4. Set up your PLATFORM_REPO_PATHS environment variable to ``$XILINX_VITIS/base_platforms``.

This tutorial targets VEK280 board for 2025.1 version.
This tutorial targets VEK280 board for 2025.2 version.

Data generation for this tutorial requires [Python 3](https://www.python.org/downloads/). The following packages are required:

Expand Down Expand Up @@ -67,10 +67,9 @@ The various memory levels contains DMAs used to receive/transfer data to/from me

Matrix multiplication is very common algorithm that can be found in numerous standard applications. The basic equation is:

```
$$ C = A.B $$
$$ \left( c_{ij} \right)_{\substack{0\leq i \lt M \\ 0 \leq j \lt N}} = \sum_{k=0}^{k<K} a_{ik}.b_{kj}$$
```


![Matrix Multiplication](images/MatrixMult.png)

Expand Down Expand Up @@ -109,9 +108,7 @@ The *AI Engine-ML* has specific hardware instructions for matrix multiplications

In the example developed in this tutorial the 3 matrices A, B and C are all 64x64 with 8-bit data:

```
$$A_{64x64}.B_{64x64} = C_{64x64}$$
```

The mode `4x16x8` will be used so that we need to decompose matrix **A** into `4x16`sub-matrices, matrix **B** into `16x8`sub-matrices in oder to compute **C** using `4x8` sub-results:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ OPT ?= 0
SIZES := sizeM=$(sizeM) sizeK=$(sizeK) sizeN=$(sizeN) subM=$(subM) subK=$(subK) subN=$(subN) NIterations=$(NIterations) PLIOW=$(PLIOW) OPT=$(OPT)
SIZES_D := -DsizeM=$(sizeM) -DsizeK=$(sizeK) -DsizeN=$(sizeN) -DsubM=$(subM) -DsubK=$(subK) -DsubN=$(subN) -DNIterations=$(NIterations) -DPLIOW=$(PLIOW) -DOPTIMIZED_SOURCE=$(OPT)

SIZES_D_Preproc := $(foreach word,$(SIZES_D),--aie.Xpreproc $(word))

WORKDIR := ./Work$(OPT)
AIEOUTDIR := aiesimulator_output$(OPT)
X86OUTDIR := x86simulator_output$(OPT)
Expand All @@ -40,7 +42,7 @@ GRAPH = src/graph.cpp
LIBADF = libadf$(OPT).a
AIE_CMPL_CMD := v++ --compile --mode aie --include "./src" --aie.workdir $(WORKDIR) ${GRAPH}
AIE_FLAGS += --aie.log-level 5
AIE_FLAGS += --aie.Xpreproc "$(SIZES_D)"
AIE_FLAGS += $(SIZES_D_Preproc)
AIE_FLAGS += --aie.Xchess "ClassicMatMult:backend.mist2.xargs=+Omodo"
AIE_FLAGS += --aie.output-archive $(LIBADF)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ SPDX-License-Identifier: MIT
*/


#include <iostream>
#include <fstream>
#include <cstring>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
ECHO = @echo
export TARGET ?= hw

RELEASE=2025.1
RELEASE=2025.2
BOARD=vek280
BASE_NUM=202510_1
BASE_NUM=202520_1

# Platform Selection...
VERSAL_VITIS_PLATFORM = xilinx_${BOARD}\_base_${BASE_NUM}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

# Prime Factor FFT-1008 on AIE-ML

***Version: Vitis 2025.1***
***Version: Vitis 2025.2***

## Table of Contents

Expand All @@ -32,15 +32,16 @@
[License](#license)

## Introduction

The Prime Factor Algorithm (PFA) [[1]] is a Fast Fourier Transform (FFT) algorithm [[2]] discovered by Good & Thomas before the more popular Cooley-Tukey algorithm with some interesting properties. The PFA is another "divide and conquer" approach for computing a Discrete Fourier Transform (DFT) of size $N = N_1 \cdot N_2$ as a two-dimensional DFT of size $N_1 \times N_2$ as long as $N_1$ and $N_2$ are relatively prime (ie. share no common divisors). The smaller transforms of size $N_1$ and $N_2$ may be computed by some other technique, for example using the Winograd FFT Algorithm, or the PFA technique may be applied recursively again to both $N_1$ and $N_2$. It turns out Versal AI Engines compute DFT with small dimensions $N < 32$ very efficiently using direct vector/matrix multiplication. Consequently, the PFA approach using DFT on the individual prime factors provides an efficient approach to the FFT on Versal AI Engines.

A second advantage of the PFA approach is that unlike the popular Cooley-Tukey FFT, no extra multiplications by "twiddle factors" need be performed between stages. This fact falls out of the DFT factorization when $N_1$ and $N_2$ share no common factors. This provides a computational advantage compared to the more traditional Cooley-Tukey formulation, but the PFA incurs a drawback in that a complicated re-indexing or permutation of it's I/O samples is required. For Versal devices with both AI Engines and Programmable Logic (PL), however, this drawback is solved easily by leveraging the PL to implement these permutations as part of a custom data flow tailored to the PFA signal flow graph.

An [earlier tutorial](../../../AIE/Design_Tutorials/05-Prime-Factor-FFT) implemented a PFA-1008 transform on AIE architecture in the VC1902 device. This tutorial maps the PFA-1008 transform to AIE-ML architecture in the VE2802 device. Once again we map the short-length DFT-7, DFT-9 and DFT-16 transforms to AI Engine using vector-matrix DFT's but this time to the AIE-ML architecture. The intermediate "memory transpose" operations mapped earlier to the programmable logic (PL) are instead mapped here to the Memory Tiles contained in the AIE-ML array. This simplifies data flow and keeps most of the graph inside the the array. The input and output permutation blocks remain implemented in the PL as RTL obtained using VItis High Level Synthesis (HLS) from untimed C++ models. These cannot be mapped to Mem Tiles as they require a type of modulo addressing not supported by the Memory Tile buffer descriptors (BDs).

## Matlab Models
## MATLAB Models

This tutorial relies on the same Matlab models from the [original tutorial](../../../AIE/Design_Tutorials/05-Prime-Factor-FFT). These models have been replicated here in the `matlab` folder of the repo. These apply to both the signal processing functions as well as the I/O permutations and matrix transpose addressing operations. All remain identical.
This tutorial relies on the same MATLAB® models from the [original tutorial](../../../AIE/Design_Tutorials/05-Prime-Factor-FFT). These models have been replicated here in the `matlab` folder of the repo. These apply to both the signal processing functions as well as the I/O permutations and matrix transpose addressing operations. All remain identical.

## Design Overview

Expand Down Expand Up @@ -157,16 +158,16 @@ The figure below summarizes the PL resources required to implement the design. T

### Setup & Initialization

IMPORTANT: Before beginning the tutorial ensure you have installed Vitis™ 2025.1 software. Ensure you have downloaded the Common Images for Embedded Vitis Platforms from [this link](https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-platforms.html).
IMPORTANT: Before beginning the tutorial ensure you have installed Vitis™ 2025.2 software. Ensure you have downloaded the Common Images for Embedded Vitis Platforms from [this link](https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-platforms.html).

Set the environment variable ```COMMON_IMAGE_VERSAL``` to the full path where you have downloaded the Common Images. Then set the environment variable ```PLATFORM_REPO_PATHS``` to the value ```$XILINX_VITIS/base_platforms```. Additional information on this process may be found [here](../../../AIE#environment-settings).

The remaining environment variables are configured in the top level Makefile ```<path-to-design>/02-Prime-Factor-FFT/Makefile``` file.

```
RELEASE=2025.1
RELEASE=2025.2
BOARD=vek280
BASE_NUM=202510_1
BASE_NUM=202520_1

# Platform Selection...
VERSAL_VITIS_PLATFORM = xilinx_${BOARD}\_base_${BASE_NUM}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ MY_APP := dft16_app
MY_SOURCES := ${MY_APP}.cpp dft16_graph.h dft16_mmul0.h dft16_mmul0.cpp dft16_mmul1.h dft16_mmul1.cpp \
dft16_twiddle.h

PLATFORM_USE := xilinx_vek280_base_202510_1
PLATFORM := ${PLATFORM_REPO_PATHS}/${PLATFORM_USE}/${PLATFORM_USE}.xpfm
PART_USE := xcve2802-vsvh1760-2MP-e-S

CHECK_FIFO := --aie.evaluate-fifo-depth --aie.Xrouter=disablePathBalancing

Expand All @@ -21,8 +20,7 @@ DSPLIB_OPTS := --include=${DSPLIB_ROOT}/L2/include/aie \

AIE_OUTPUT := libadf.a

AIE_FLAGS := ${DSPLIB_OPTS} --platform=${PLATFORM} ${MY_APP}.cpp --aie.output-archive=${AIE_OUTPUT}

AIE_FLAGS := ${DSPLIB_OPTS} --part=${PART_USE} ${MY_APP}.cpp --aie.output-archive=${AIE_OUTPUT}
ifeq (${SIM_FIFO}, true)
AIE_FLAGS := ${AIE_FLAGS} ${CHECK_FIFO}
endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ MY_APP := dft7_app
MY_SOURCES := ${MY_APP}.cpp dft7_graph.h dft7_mmul0.h dft7_mmul0.cpp dft7_mmul1.h dft7_mmul1.cpp \
dft7_twiddle.h

PLATFORM_USE := xilinx_vek280_base_202510_1
PLATFORM := ${PLATFORM_REPO_PATHS}/${PLATFORM_USE}/${PLATFORM_USE}.xpfm
PART_USE := xcve2802-vsvh1760-2MP-e-S

CHECK_FIFO := --aie.evaluate-fifo-depth --aie.Xrouter=disablePathBalancing

Expand All @@ -21,8 +20,7 @@ DSPLIB_OPTS := --include=${DSPLIB_ROOT}/L2/include/aie \

AIE_OUTPUT := libadf.a

AIE_FLAGS := ${DSPLIB_OPTS} --platform=${PLATFORM} ${MY_APP}.cpp --aie.output-archive=${AIE_OUTPUT}

AIE_FLAGS := ${DSPLIB_OPTS} --part=${PART_USE} ${MY_APP}.cpp --aie.output-archive=${AIE_OUTPUT}
ifeq (${SIM_FIFO}, true)
AIE_FLAGS := ${AIE_FLAGS} ${CHECK_FIFO}
endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,13 @@ MY_APP := dft9_app
MY_SOURCES := ${MY_APP}.cpp dft9_graph.h dft9_mmul0.h dft9_mmul1.h dft9_mmul0.cpp dft9_mmul1.cpp \
dft9_mmul3.h dft9_mmul3.cpp dft9_twiddle.h

PLATFORM_USE := xilinx_vek280_base_202510_1
PLATFORM := ${PLATFORM_REPO_PATHS}/${PLATFORM_USE}/${PLATFORM_USE}.xpfm
PART_USE := xcve2802-vsvh1760-2MP-e-S

CHECK_FIFO := --aie.evaluate-fifo-depth --aie.Xrouter=disablePathBalancing

AIE_OUTPUT := libadf.a

AIE_FLAGS := --platform=${PLATFORM} ${MY_APP}.cpp --aie.output-archive=${AIE_OUTPUT}

AIE_FLAGS := ${DSPLIB_OPTS} --part=${PART_USE} ${MY_APP}.cpp --aie.output-archive=${AIE_OUTPUT}
ifeq (${SIM_FIFO}, true)
AIE_FLAGS := ${AIE_FLAGS} ${CHECK_FIFO}
endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ SIM_FIFO := false
MY_APP := permute_i_app
MY_SOURCES := ${MY_APP}.cpp permute_i_graph.h permute_i_bd.h

PLATFORM_USE := xilinx_vek280_base_202510_1
PLATFORM := ${PLATFORM_REPO_PATHS}/${PLATFORM_USE}/${PLATFORM_USE}.xpfm
PART_USE := xcve2802-vsvh1760-2MP-e-S

CHECK_FIFO := --aie.evaluate-fifo-depth --aie.Xrouter=disablePathBalancing

Expand All @@ -20,8 +19,7 @@ DSPLIB_OPTS := --include=${DSPLIB_ROOT}/L2/include/aie \

AIE_OUTPUT := libadf.a

AIE_FLAGS := ${DSPLIB_OPTS} --platform=${PLATFORM} ${MY_APP}.cpp --aie.output-archive=${AIE_OUTPUT}

AIE_FLAGS := ${DSPLIB_OPTS} --part=${PART_USE} ${MY_APP}.cpp --aie.output-archive=${AIE_OUTPUT}
ifeq (${SIM_FIFO}, true)
AIE_FLAGS := ${AIE_FLAGS} ${CHECK_FIFO}
endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@ MY_SOURCES := ${MY_APP}.cpp pfa1008_graph.h ${DFT7_SOURCE:%=../dft7/%} ${
${DFT16_SOURCE:%=../dft16/%} \
${TRANSPOSE0_SOURCE:%=../transpose0/%} ${TRANSPOSE1_SOURCE:%=../transpose1/%}

PLATFORM_USE := xilinx_vek280_base_202510_1
PLATFORM := ${PLATFORM_REPO_PATHS}/${PLATFORM_USE}/${PLATFORM_USE}.xpfm
PART_USE := xcve2802-vsvh1760-2MP-e-S

CHECK_FIFO := --aie.evaluate-fifo-depth --aie.Xrouter=disablePathBalancing

Expand All @@ -38,7 +37,7 @@ MY_INCLUDES := --include=../dft7 \

AIE_OUTPUT := libadf.a

AIE_FLAGS := ${MY_INCLUDES} --platform=${PLATFORM} ${MY_APP}.cpp --aie.output-archive=${AIE_OUTPUT}
AIE_FLAGS := ${MY_INCLUDES} --part=${PART_USE} ${MY_APP}.cpp --aie.output-archive=${AIE_OUTPUT}

ifeq (${SIM_FIFO}, true)
AIE_FLAGS := ${AIE_FLAGS} ${CHECK_FIFO}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ SIM_FIFO := false
MY_APP := transpose0_app
MY_SOURCES := ${MY_APP}.cpp transpose0_graph.h

PLATFORM_USE := xilinx_vek280_base_202510_1
PLATFORM := ${PLATFORM_REPO_PATHS}/${PLATFORM_USE}/${PLATFORM_USE}.xpfm
PART_USE := xcve2802-vsvh1760-2MP-e-S

CHECK_FIFO := --aie.evaluate-fifo-depth --aie.Xrouter=disablePathBalancing

Expand All @@ -20,8 +19,7 @@ DSPLIB_OPTS := --include=${DSPLIB_ROOT}/L2/include/aie \

AIE_OUTPUT := libadf.a

AIE_FLAGS := ${DSPLIB_OPTS} --platform=${PLATFORM} ${MY_APP}.cpp --aie.output-archive=${AIE_OUTPUT}

AIE_FLAGS := ${DSPLIB_OPTS} --part=${PART_USE} ${MY_APP}.cpp --aie.output-archive=${AIE_OUTPUT}
ifeq (${SIM_FIFO}, true)
AIE_FLAGS := ${AIE_FLAGS} ${CHECK_FIFO}
endif
Expand Down
Loading