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 系列即可满足。选型不是追求最大资源,而是让接口、算力和功耗在目标场景下平衡。
二、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 启动日志。
验证步骤建议按以下顺序进行:
- 确认串口波特率为 115200,能看到 U-Boot 倒计时和内核启动信息。
- 登录 Linux 后,执行
ls /dev检查串口、I2C、SPI 等设备节点是否生成。 - 使用
ifconfig或ip link查看以太网接口,确认 PHY 链路状态。 - 通过
dmesg | grep -i versal检查 PL 和 AI Engine 驱动加载情况。 - 运行 Vitis 生成的测试程序,验证 PS 与 PL/AIE 的数据通路是否正常。