🏠

欢迎来到 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 异构计算的本质,是实现控制流与数据流的完美正交。以下是该项目所展示的典型系统架构:

graph TD A[Host CPU / XRT Runtime] -->|控制命令 / 动态参数 RTP| B(System Connectivity .cfg) A -->|数据下发/回读| C[(External Memory DDR / HBM)] B -.配置连线.-> D B -.配置映射.-> E C <-->|AXI4-MM 大吞吐量传输| D[PL HLS 层: 数据搬运与重排 DMA] D <-->|AXI4-Stream 高速微秒级流| E[AIE Array 层: 核心数学与 ML 计算] style A fill:#e3f2fd,stroke:#1565c0,stroke-width:2px style C fill:#fff3e0,stroke:#ef6c00,stroke-width:2px style D fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px style E fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px

架构漫游指南: 数据从外部世界或 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++ 编写底层硬件,通过操作 PIPELINEUNROLL 等拨片,榨干硅片的性能。

🚀 纯 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 上,实现吞吐量四倍翻番。

准备好开始了吗? 请点击上方导航进入你最感兴趣的模块,开启异构计算的探索之旅!

On this page