2. Versal器件与开发工具链

Versal 是 AMD 面向异构计算推出的自适应 SoC 平台,它把标量处理、可编程逻辑和专用 AI/信号处理引擎集成在同一芯片上。对于高速网络数据面加速而言,选型与工具链决定了后续开发的可行边界:器件是否具备足够的收发器速率、DSP 与 AI Engine 资源、DDR 带宽,以及工具链能否顺畅完成 PL 逻辑、PS 软件、AI Engine 内核和 Linux 系统的协同构建。本节围绕选型、Vivado/Vitis 统一平台、PetaLinux 与 Yocto 构建流程,以及开发板环境搭建展开。

一、Versal 系列选型:先看接口,再看算力

Versal 家族主要分为 Core、Prime、Premium、AI Core、AI Edge、AI RF 等系列。高速网络数据面通常优先关注三类资源:高速收发器(GTY/GTYP/GTM)、可编程逻辑与 DSP 资源、以及 AI Engine 阵列规模。以 100G 以太网数据面为例,若采用 4×25G 或 1×100G 的 MAC+PCS 方案,需要器件具备对应速率的收发器和足够的逻辑资源完成报文解析、流表查找与转发。选型时可参考以下判断顺序:

  • 接口能力:确认收发器数量、单通道速率(如 25.78125 Gbps)、是否支持 100G 以太网所需 PAM4 或 NRZ 编码。
  • 数据面算力:AI Engine 适合矩阵运算、加解密、正则匹配等规则化计算;PL 适合流水线式报文处理;DSP48E2 用于乘加密集型运算。
  • 存储与带宽:DDR4/LPDDR4 控制器数量、NoC 带宽、PL 侧 BRAM/URAM 容量决定缓存与队列深度。
  • 封装与功耗:板级散热、供电和封装尺寸需与开发板匹配。

例如,面向 100G 智能网卡原型,可选用 Versal AI Core 系列中带 GTM 收发器和中等规模 AI Engine 的型号;若仅做 25G 级协议转换,则 Prime 系列即可满足。选型不是追求最大资源,而是让接口、算力和功耗在目标场景下平衡。

Versal 器件资源与开发工具链协同关系 Versal 自适应 SoC 内部资源 标量处理系统 (PS) Arm Cortex-A72 / R5F DDR 控制器 · 外设接口 可编程逻辑 (PL) LUT · BRAM · URAM · DSP48E2 GTY/GTYP/GTM 收发器 AI Engine 阵列 向量/标量计算单元 级联数据流 · 共享内存 片上网络 (NoC) 高带宽互连 · QoS 管理 DDR / PL / AIE 数据通路 选型关注点 收发器速率与数量 · AI Engine 规模 · DSP/BRAM 容量 DDR 带宽 · NoC 吞吐 · 封装功耗与散热 目标场景:100G 数据面 / 25G 协议转换 / 智能网卡原型 统一开发工具链 Vivado PL 综合 · 实现 · 比特流 Vitis AIE 编译 · PS 应用 · 链接 PetaLinux / Yocto Linux 镜像 · 根文件系统 开发板环境 JTAG · UART · SD 启动

二、Vivado 与 Vitis 统一软件平台

Versal 开发不再像传统 FPGA 那样只依赖单一工具,而是 Vivado 与 Vitis 协同工作。Vivado 负责 PL 侧逻辑设计、约束、综合、实现和比特流生成,同时提供 Versal 的硬件平台导出;Vitis 则在此基础上完成 AI Engine 内核编译、PS 端应用开发、以及软硬件链接,最终生成可启动的 PDI 镜像。

典型流程如下:先在 Vivado 中创建 Versal 工程,配置 PS、PL、NoC 和 AI Engine 的硬件平台,导出 XSA 文件;再在 Vitis 中导入 XSA,创建平台工程和应用工程。对于 AI Engine 部分,Vitis 使用 AI Engine 编译器将 C++ 内核编译为 ELF,并通过图(graph)描述数据流连接。PS 端应用通常基于 Xilinx Runtime(XRT)或 OpenCL 接口访问加速器。

# 示例:Vivado 中导出硬件平台(Tcl 控制台)
write_hw_platform -fixed -include_bit -force ./versal_platform.xsa

# 示例:Vitis 中创建平台工程
vitis -workspace ./ws -new
# 在 GUI 中导入 versal_platform.xsa,生成 platform 工程

需要特别注意的是,Versal 的启动镜像 PDI 由 PL 配置、AI Engine 配置和 PS 启动头组成,Vitis 在链接阶段会将这些部分打包。若只更新 PL 逻辑,可单独生成部分比特流;若 AI Engine 图发生变化,则需重新编译并重新链接。

三、PetaLinux 与 Yocto 构建流程

Versal 的 PS 端通常运行 Linux。PetaLinux 是 AMD 提供的 Yocto 封装工具,简化了内核、设备树、根文件系统的配置与构建。其核心流程为:创建工程、导入 XSA 硬件描述、配置内核与根文件系统、构建镜像。Yocto 则更底层,适合需要精细控制软件包版本或定制发行版的场景。

PetaLinux 常用命令如下:

# 创建 PetaLinux 工程
petalinux-create -t project --template versal -n versal_net

# 导入 Vivado 导出的 XSA
petalinux-config --get-hw-description=./versal_platform.xsa

# 配置内核与根文件系统
petalinux-config -c kernel
petalinux-config -c rootfs

# 构建
petalinux-build

# 生成启动镜像 BOOT.BIN
petalinux-package --boot --u-boot --force

构建完成后,在 images/linux 目录下会得到 BOOT.BIN、image.ub 和根文件系统。将 BOOT.BIN 与 image.ub 放入 SD 卡 FAT 分区,设置启动模式为 SD,即可从开发板启动 Linux。若使用 Yocto,则需先准备 meta-xilinx 层,再通过 bitbake 构建核心镜像,例如 core-image-minimal。

四、开发板环境搭建与验证

开发板环境搭建包括硬件连接、启动模式设置和串口终端配置。以常见 Versal 开发板为例:使用 12V 电源供电,JTAG 连接下载器,UART 连接 USB 转串口,SD 卡插入卡槽。启动模式拨码开关设置为 SD 启动(例如 0b0010,具体以板卡手册为准)。上电后,串口终端应输出 U-Boot 和 Linux 启动日志。

验证步骤建议按以下顺序进行:

  1. 确认串口波特率为 115200,能看到 U-Boot 倒计时和内核启动信息。
  2. 登录 Linux 后,执行 ls /dev 检查串口、I2C、SPI 等设备节点是否生成。
  3. 使用 ifconfig 或 ip link 查看以太网接口,确认 PHY 链路状态。
  4. 通过 dmesg | grep -i versal 检查 PL 和 AI Engine 驱动加载情况。
  5. 运行 Vitis 生成的测试程序,验证 PS 与 PL/AIE 的数据通路是否正常。
若串口无输出,优先检查启动模式拨码、SD 卡分区格式(FAT32)和 BOOT.BIN 是否完整;若 Linux 启动后网口不通,检查设备树中 PHY 地址与复位 GPIO 配置是否与板卡原理图一致。