欢迎来到 Vitis-Tutorials:异构加速计算架构指南
👋 你好,开发者! 无论你是传统的软件工程师、算法专家,还是资深的 FPGA 架构师,欢迎来到 AMD/Xilinx 异构计算的“实战兵工厂”。作为你接触该项目的第一站,本页面将为你提供一张清晰的系统导航地图。
📖 文档指南 (Documentation Guides)
除了本概览与核心模块向导之外,我们还为你准备了以下专题指南,帮助你针对特定需求快速上手或深入钻研:
- 快速入门指南:提供从零开始的安装步骤和首个运行教程,帮助你在几分钟内完成环境搭建并验证工具链是否正常运作。
- 初学者向导:以通俗易懂的多章节形式,循序渐进地讲解异构计算的核心概念和基础操作,适合刚接触 FPGA/ACAP 的开发者建立系统认知。
- 构建与代码组织指南:深入解析项目的构建流水线、目录结构规范以及 Makefile/Vitis 工程的最佳实践,助你高效管理复杂代码库并理解依赖关系。
- 核心算法指南:针对关键数学算法和计算内核进行形式化深度剖析,涵盖从理论推导、伪代码描述到最终硬件映射的完整技术细节。
1. 💡 这个项目是做什么的?(30秒速览)
Vitis-Tutorials 不是一个传统的“代码库”,而是一套从算法原型到超高性能硅片级别的“飞行模拟器”。
在现代 5G 通信、雷达、AI 推理等场景中,CPU 已经撞上了“内存墙”和“算力墙”。为了解决这个问题,AMD Versal 架构提供了一个超级工厂:
- Host (CPU):是工厂的“指挥官”,负责发号施令。
- PL (可编程逻辑 / FPGA):是工厂的“智能物流网络”,负责数据的搬运、重新排列和协议转换。
- AIE (AI 引擎):是无与伦比的“流水线加工机床”,由数百个向量处理器组成,专攻密集的数学计算(SIMD)。
这个项目的核心目的,就是通过丰富的实战教程,教你如何利用 C++ 编写各个模块,并通过 Vitis 统一软件平台,将它们无缝拼接成一个能跑满带宽、消除延迟瓶颈的超高性能数据流系统。
2. 🗺️ 架构全局纵览 (Architecture at a Glance)
整个 Vitis 异构计算的本质,是实现控制流与数据流的完美正交。以下是该项目所展示的典型系统架构:
架构漫游指南: 数据从外部世界或 Host CPU 出发,以大区块(Block)的形式存入 External Memory (DDR/HBM)。随后,由 PL 层 综合出的 DMA 引擎(MM2S)将区块数据读取出来,进行降维、转置或拆分,转化为连续不断的微小水流(AXI4-Stream)。这些水流注入 AIE 层 的计算矩阵,经过一系列流水线化的滤波器或矩阵乘法器,产生的结果流再次交由 PL 层收集拼装,最终写回内存供 Host 消费。所有这些硬件的拼接,均由基于文本的 System Connectivity (.cfg) 静态声明完成。
3. 🧠 核心设计决策 (Key Design Decisions)
在浏览本仓库代码时,你会反复看到以下几个核心的架构设计模式:
- 数据流 (Dataflow) 优于 控制流 (Control Flow):
系统放弃了传统的冯·诺依曼指令执行模式(先读再算再写)。整个计算被建模为生产者-消费者网络。无论是 HLS 内部的
#pragma HLS DATAFLOW,还是 AIE 的图连线,目的都是为了让模块间的 FIFO 保持常满,实现 Initiation Interval (II) = 1 的极致吞吐量。 - 计算与搬运严格解耦 (Separation of Concerns): 让专业的人做专业的事。AIE 内核保持绝对的“纯粹性”(只负责数学运算);所有复杂的数据索引映射、路由、补齐和分发工作,全部显式剥离到 PL(FPGA)层的 HLS 代码中。这极大提升了算法的可测试性与可复用性。
- 声明式拓扑组装 (Declarative Topology):
抛弃了繁琐的 RTL 连线,系统架构层采用
.cfg配置文件来定义硬件拓扑(哪个内核绑定到哪块物理区域、数据流如何连接)。这借鉴了微服务架构中的“服务网格”思想,使得硬件流水线可以通过修改配置来进行水平扩展(Scale-out,例如从单核拓展到 10 个计算单元)。
4. 📚 核心模块向导 (Module Guide)
我们根据上述的架构哲学,将庞大的教程系统织入了一张学习网络。你可以根据自己的角色,选择深入相应的模块:
🧩 基础入职与起步 (The Onboarding Path)
如果你是初学者,Getting_Started_and_Basic_Vitis 是你的第一站,它教你从零跑通一个软硬协同的“Hello World”。接着,深入 Vitis_HLS_Tutorials,在这里你会学到如何用 C++ 编写底层硬件,通过操作 PIPELINE 和 UNROLL 等拨片,榨干硅片的性能。
🚀 纯 FPGA 硬件加速师 (The Hardware Accelerator Engineer) 如果你的项目不涉及 AIE,主要聚焦 Alveo 加速卡,请直接前往 Hardware_Acceleration_Design_Tutorials。它提供了图像卷积、TSP 等完整流水线设计的最佳范例。当需要提升并行度、使用 HBM 或管理多 Compute Unit 时,Hardware_Acceleration_Feature_Tutorials 将为你提供高级战术手册。
🧠 AIE/DSP 算法架构师 (The Signal Processing & AI Architect) 这里是 Versal 的灵魂。你可以在 AIE_Design_Graphs_and_Algorithms 中看到复杂的 FFT、MUSIC 测向算法是如何被拆解映射到 AIE 物理阵列上的;在 AIE_ML_Design_Graphs 中学习专为机器学习(AIE-ML)优化的空间布局技巧。
🏗️ 系统集成与架构师 (The System Integrator)
你需要将所有人的工作拼接起来。在 AIE_ML_PL_HLS_Integration 中,你会学到如何用 HLS 编写衔接 AIE 和内存的“数据搬运工”。通过 AIE_Design_System_Integration 掌握声明式连线 (system.cfg) 的艺术。最后,在 AIE_Feature_Tutorials_Runtime_and_Platform 中,学习如何使用 XRT 在主机 CPU 上异步调度和控制这些庞然大物。
(注:需要定制底层 Linux 和 BSP 的平台工程师可以查阅 Vitis_Platform_Creation_Tutorials;而寻找社区落地案例的开发者请浏览 Developer_Contributed_Examples。)
5. 🛤️ 端到端工作流:核心用户旅程
为了让你更好地理解模块间的协作,我们追踪两个最典型的开发旅程:
旅程一:开发一个 5G 频域通道化器 (Channelizer)
- Step 1: 数学建模:你首先进入
AIE_Design_Graphs_and_Algorithms,使用 C++ API 编写多相 FIR 滤波器组和 FFT 节点,并将它们封装成 ADF Graph。 - Step 2: 消除数据瓶颈:由于 AIE 阵列的带宽要求极高,你进入
AIE_ML_PL_HLS_Integration学习并编写了 PL 层的 HLS DMA 模块,负责将 DDR 数据拆分并执行循环移位对齐。 - Step 3: 系统织网:你跳转到
AIE_Design_System_Integration,编写system.cfg,声明式地将 PL DMA 的输出 AXI-Stream 连接到 AIE Graph 的输入 PLIO。 - Step 4: 运行时调度:最后,在
AIE_Feature_Tutorials_Runtime_and_Platform的指导下,你编写了 Host C++ 程序,使用 XRT 非阻塞队列(Out-of-Order Queue)发起数据传输,并动态更新滤波器的 RTP 权重。
旅程二:传统图像算法的 FPGA 高并发改造
- Step 1: 内核硬件化:参考
Vitis_HLS_Tutorials,将原本的 OpenCV 2D 卷积代码改写,引入 Line Buffer 架构以节约内存带宽。 - Step 2: 流水线化设计:进入
Hardware_Acceleration_Design_Tutorials,使用#pragma HLS DATAFLOW将读取、计算和写回分离成并发流水线。 - Step 3: 规模扩展:单核吞吐量不够,你参考
Hardware_Acceleration_Feature_Tutorials中的多 Compute Unit 调度范例,在配置文件中将该内核nk=4实例化四份,分别部署在不同的物理 SLR 上,实现吞吐量四倍翻番。
准备好开始了吗? 请点击上方导航进入你最感兴趣的模块,开启异构计算的探索之旅!