4. Vivado与Vitis统一开发环境搭建

Versal 的开发与传统 FPGA 最大的不同,在于它把可编程逻辑(PL)、处理系统(PS)和 AI 引擎(AIE)整合在一颗芯片上,因此工具链也必须是"统一"的:Vivado 负责硬件平台(PL 逻辑、IP 集成、约束与比特流),Vitis 负责在硬件平台之上构建软件与加速应用。本节围绕一条可落地的路径展开:从器件选型开始,到板级支持包(BSP)准备、平台工程创建,再到视频 IP 集成与调试工具链配置,最终得到一个既能跑硬件、又能跑软件的完整工程骨架。

一、器件选型:先定芯片,再定工具版本

Versal 家族主要分为 AI Core 系列(VC1902、VC1802 等,含 AIE-ML/AIE 阵列,面向 AI 推理与高性能 DSP)、AI Edge 系列(VE 系列,面向边缘低功耗)、Prime 系列(VM 系列,偏逻辑与接口)以及 Premium 系列(VP 系列,含高速收发器与 400G 接口)。视频图像处理通常关注三件事:DSP 切片数量(决定卷积、缩放、色彩变换的并行度)、AIE 阵列规模(决定是否把 ISP 或推理放到 AIE)、以及高速接口(MIPI、SDI、HDMI、PCIe、以太网)。

以 1080p60 视频链路为例,若需要同时做去噪、3A 统计和轻量目标检测,VC1902 的 400 个 AIE 与约 1968 个 DSP58 是比较稳妥的起点;若只做多路 4K 缩放与色彩空间转换,VM1802 往往更经济。选型确定后,工具版本必须与器件支持对齐:Vivado 2023.2 及以上对 Versal AI Edge 与 AIE-ML 支持更完整,Vitis 版本需与 Vivado 严格一致,否则平台导出(XSA)会出现版本不匹配告警。

二、板级支持包与平台工程创建

板级支持包(BSP)本质上是"板卡描述 + 预配置 IP + 约束"的集合。若使用官方开发板(如 VCK190、VEK280),可直接在 Vivado 的 Boards 面板中安装对应板卡文件,创建工程时选择板卡而非裸器件,这样 DDR、时钟、MIPI 引脚等约束会自动带入。若是自研板,则需要手动建立板卡文件或至少准备三样东西:器件型号、时钟约束(XDC)、引脚约束(XDC)。

平台工程创建的标准动作是:在 Vivado 中新建工程 → 选择器件/板卡 → 创建 Block Design → 添加并配置 Zynq UltraScale+ MPSoC 或 Versal CIPS(Control, Interface & Processing System)→ 使能必要的外设(DDR、UART、SD、以太网)→ 运行 Block Automation 与 Connection Automation → 生成 HDL Wrapper → 综合实现 → 导出 XSA。导出的 XSA 就是 Vitis 的"硬件平台"输入。

# 典型平台导出检查项(Vivado Tcl 控制台)
write_hw_platform -fixed -include_bit -force ./versal_video_platform.xsa
# 确认包含:CIPS 配置、DDR 控制器、时钟、PL 时钟、中断控制器
建议在导出 XSA 前先执行 validate_bd_design,并确认 PL 时钟频率与视频像素时钟(如 148.5 MHz for 1080p60)一致,否则后续 Vitis 中驱动初始化会因时钟不匹配而失败。

三、视频 IP 集成流程

Versal 的视频通路通常由"输入接口 → 视频处理 → 输出接口"三段构成。输入侧常用 MIPI CSI-2 RX Subsystem 或 SDI RX,输出侧常用 HDMI TX Subsystem 或 DisplayPort。中间处理段可选用 Vitis Vision Library 中的 IP(如 vitis_vision 的 resize、cvtcolor)、HLS 生成的 IP,或直接调用 AIE 做 ISP。

集成时的关键连接关系是 AXI4-Stream 视频流与 AXI4-Lite 控制总线分离:视频数据走 AXI4-Stream(含 TUSER 作为 SOF、TLAST 作为 EOL),寄存器配置走 AXI4-Lite。若使用 VDMA 做帧缓存,需要把 MM2S/S2MM 分别接到 DDR 与视频流,并注意 AXI 位宽匹配(如 64-bit DDR 侧对 24-bit 像素需做位宽转换)。

Versal 视频处理平台:硬件通路与工具链映射 MIPI CSI-2 RX 或 SDI / HDMI RX 视频处理 IP Vitis Vision / HLS / AIE ISP resize · cvtcolor · 3A VDMA / 帧缓存 MM2S / S2MM AXI4-Stream ↔ DDR HDMI TX / DP 输出子系统 DDR4 / LPDDR4 帧缓冲 · 权重 · 中间结果 AXI4-Lite 控制 寄存器配置 · 中断 CIPS / PS ARM · DDR · UART 工具链映射 Vivado:Block Design · IP 集成 · 约束 · 比特流 Vitis:XSA 平台 · 驱动 · 应用 · 调试 Vitis Analyzer:时序 · 性能 · 波形

四、Vitis 平台与应用工程

在 Vitis 中新建 Platform Project,导入上一步的 XSA,选择操作系统(standalone 或 Linux)。standalone 适合裸机验证视频通路,Linux 适合带文件系统与 OpenCV 的场景。平台生成后会自动产生 BSP,包含 xilffs、xilpm、视频驱动等库。随后新建 Application Project,模板可选 Hello World 或 Empty Application,再手动加入视频驱动与 DMA 控制代码。

一个典型的裸机视频链路初始化顺序是:初始化 CIPS 与时钟 → 配置 VDMA 寄存器(源地址、目的地址、帧长、行数)→ 配置视频 IP 寄存器(分辨率、像素格式)→ 启动 VDMA 传输 → 等待帧中断 → 读取状态寄存器判断是否溢出。若 VDMA 的 VSIZE 与 HSIZE 设置与实际分辨率不符,会出现图像撕裂或只显示部分画面,这是最常见的调试点。

五、调试工具链配置

调试分三层:硬件层用 Vivado 的 ILA(Integrated Logic Analyzer)抓 AXI4-Stream 的 TUSER/TLAST 与 AXI4-Lite 的读写事务;软件层用 Vitis 的串口终端打印与断点;系统层用 Vitis Analyzer 查看时序与性能。ILA 的采样深度建议至少 4096,触发条件设为 TUSER==1 && TLAST==1 可捕获完整一帧的起止。

ILA 会占用 BRAM 与布线资源,若视频 IP 已接近时序收敛边缘,插入 ILA 可能导致布线失败。建议先在低分辨率(如 720p)下验证,再切回 1080p 或 4K。

最后给出一个可执行的检查清单,用于确认平台是否搭建成功:XSA 导出无版本告警;Vitis 平台编译通过且 BSP 包含视频驱动;串口能打印初始化日志;ILA 能抓到 SOF/EOL;VDMA 状态寄存器无 overflow 位;HDMI 输出端能看到稳定画面。六项全部通过,说明 Vivado 与 Vitis 的统一开发环境已经就绪,可以进入后续的视频算法与 AIE 加速开发。