3. Vivado与Vitis统一开发流程搭建

Versal 的开发与传统 Zynq 最大的不同,在于它把 PL(可编程逻辑)、PS(处理系统)和 AI Engine 都放进了一颗芯片,因此工具链也必须是"统一"的:硬件侧用 Vivado 描述并导出平台,软件侧用 Vitis 在该平台上生成 BSP、编译应用,而 PetaLinux 负责生成 Linux 启动镜像与根文件系统。本节的目标是搭起一条能跑通 Hello World 的最小闭环,让后续的工业通信与边缘控制开发有一个可靠的起点。

一、工具链的版本与安装策略

AMD 的统一安装器(Unified Installer)可以一次装齐 Vivado、Vitis 和 PetaLinux 所需的组件。对 Versal 而言,版本一致性比"用最新版"更重要:Vivado、Vitis、PetaLinux 三者必须来自同一发布版本(例如 2023.2 或 2024.1),否则 XSA 与 BSP 之间容易出现器件支持不匹配。安装时建议勾选:Vivado ML Standard(含 Versal 器件支持)、Vitis Unified Software Platform、以及对应版本的 PetaLinux 安装包(PetaLinux 通常单独下载 .run 文件)。

磁盘与内存是常见坑点:完整安装约需 100 GB 以上空间,Vivado 综合与 PetaLinux 编译建议 32 GB 内存、8 核以上 CPU。Linux 主机上还需预装依赖库,例如 Ubuntu 下常见的 libtinfo5、libncurses5、python3、gcc、make、git、device-tree-compiler 等。PetaLinux 安装后必须执行 source settings.sh 才能使用 petalinux-* 命令。

# 以 Ubuntu 为例,安装 PetaLinux 依赖(示例)
sudo apt-get install -y gcc g++ make git python3 python3-pip \
  libncurses5 libtinfo5 libssl-dev device-tree-compiler \
  flex bison texinfo zlib1g-dev

# 安装 PetaLinux(示例路径)
chmod +x petalinux-v2023.2-10141622-installer.run
./petalinux-v2023.2-10141622-installer.run --dir /opt/pkg/petalinux/2023.2

# 每次使用前 source 环境
source /opt/pkg/petalinux/2023.2/settings.sh
echo $PETALINUX   # 应输出安装路径

二、创建 Versal 平台工程

在 Vivado 中新建工程时,选择目标器件或开发板(例如 VCK190 / VMK180 等 Versal 评估板)。若使用官方开发板,建议直接选用 Board Part,这样 PS 的 DDR、时钟、外设预设会自动带入,减少手工配置错误。工程创建后,通过 IP Integrator 添加 Versal CIPS(Control, Interface & Processing System)IP,这是 Versal 的"PS 核心"。

在 CIPS 配置中,需要关注几项与后续软件强相关的设置:

  • PS 外设:至少使能一个 UART(用于 Hello World 打印)和调试接口;工业场景常同时使能 Ethernet、I2C、SPI、CAN 等。
  • 时钟与 DDR:确认 DDR 型号与速率,PS 参考时钟频率要与板级晶振一致。
  • 启动模式:QSPI、SD、JTAG 等,影响后续 PetaLinux 生成的 boot.bin 结构。
  • PL 时钟与复位:若后续要挂 PL 侧 IP,需在 CIPS 中导出 PL 时钟/复位。

配置完成后,在 Block Design 中做 Validate Design,确认无严重错误,然后生成输出产物(Generate Output Products),最后导出硬件:File → Export → Export Hardware,勾选 Include bitstream,得到 .xsa 文件。这个 XSA 是硬件与软件之间的"契约",Vitis 和 PetaLinux 都从它读取硬件信息。

三、从 XSA 到软件平台

打开 Vitis,新建 Platform Project,导入刚才的 XSA。Vitis 会自动解析出处理器核(如 psv_cortexa72_0)、外设地址映射和时钟信息。平台工程需要选择操作系统域:裸机(standalone)或 Linux。若目标是先验证工具链,建议先建一个 standalone 域,生成 BSP 后即可编译裸机 Hello World;若目标是 Linux 应用,则需在 PetaLinux 侧生成镜像,再在 Vitis 中建立 Linux 域并指向 sysroot。

平台编译完成后,右键平台工程 → Build,生成 platform.xpfm 与对应的域。随后新建 Application Project,选择该平台与域,模板选 Hello World。Vitis 会自动生成 helloworld.c,其中 printf("Hello World\n") 通过 UART 输出。编译后得到 .elf(裸机)或可执行文件(Linux)。

四、PetaLinux 生成启动镜像

若需要 Linux 环境,用 PetaLinux 基于同一 XSA 创建工程:

petalinux-create -t project --template versal -n versal_hello
cd versal_hello
petalinux-config --get-hw-description=../design_1_wrapper.xsa
# 在菜单中确认串口、启动设备、根文件系统类型
petalinux-build
petalinux-package --boot --u-boot --force

构建完成后,images/linux/ 下会得到 BOOT.BIN、image.ub、boot.scr 等文件。将它们放入 SD 卡 FAT 分区,设置启动模式为 SD,上电后串口应能看到 U-Boot 与内核启动日志,最终进入登录提示符。此时再通过 Vitis 或直接在板端运行 Hello World,即可验证"硬件—平台—软件"链路是否贯通。

Versal 统一开发流程:从硬件描述到 Hello World Vivado(硬件) 新建工程 / 选 Board Part CIPS 配置 PS 外设 / DDR / 时钟 Validate → Generate → Export XSA .xsa 硬件—软件契约 Vitis(软件) Platform Project ← 导入 XSA 选择域:standalone / Linux Application Project → Hello World PetaLinux(Linux 镜像) petalinux-create --template versal petalinux-config --get-hw-description petalinux-build petalinux-package --boot 输出:BOOT.BIN / image.ub / boot.scr → SD 卡启动 板端验证 SD 启动 / JTAG 下载 串口观察 U-Boot / 内核日志 运行 Hello World → 打印成功

五、结果判读与常见问题

验证是否成功,关键看三个信号:其一,Vivado 导出 XSA 时无 critical warning,且 XSA 中包含 bitstream;其二,Vitis 平台编译无报错,BSP 中能看到 UART 基地址;其三,板端串口出现 Hello World 字样。若串口无输出,先检查波特率(通常 115200)、串口线是否接对、CIPS 中 UART 是否使能;若 Linux 启动卡在 U-Boot,多半是 BOOT.BIN 与启动模式不匹配,或 SD 卡分区格式不对(FAT32 放启动文件,ext4 放根文件系统)。

建议把 XSA、Vitis 平台工程、PetaLinux 工程放在同一版本目录下统一管理,例如 ~/versal/2023.2/,避免跨版本混用导致难以定位的兼容性问题。

走通这条最小闭环后,后续的工业以太网、CAN、实时控制等应用,都可以在这个平台上逐步叠加:PL 侧加 IP、PS 侧加驱动、Linux 侧加应用,而工具链的骨架保持不变。