1. 课程导入与开发环境搭建
AMD Zynq 系列把 ARM 处理器系统(PS)与可编程逻辑(PL)集成在同一芯片上,再配合 PCIe 硬核,就构成了一条从主机到板卡的完整高速互连通路。典型应用包括:数据采集卡把 ADC 采样经 PL 打包后通过 PCIe DMA 写入主机内存;工业相机把图像帧经 PCIe 上传做实时处理;以及基于 Zynq 的加速卡,由主机下发描述符、板卡完成计算后回传结果。这些场景的共同点是:主机侧需要枚举设备、映射 BAR 空间、分配 DMA 缓冲区,板卡侧需要配置 PCIe 硬核、实现地址转换与中断上报。本课程围绕这条链路展开,从环境搭建一直讲到驱动与性能调优。
1.1 整体开发流程与工具分工
Zynq PCIe 系统的开发不是单一工具能完成的,而是三个工具链协同:Vivado 负责硬件平台,Vitis 负责 PS 端裸机或 Linux 应用,PetaLinux 负责生成带 PCIe 驱动与设备树的 Linux 系统。三者之间的交付物关系是理解整个流程的关键,下图给出从硬件工程到主机侧验证的完整数据流与产物依赖。
1.2 工具安装与版本选择
建议统一使用 Vivado/Vitis 2022.2 或 2023.2 这类长期支持版本,PetaLinux 版本必须与 Vivado 完全一致,否则导入 .xsa 时会出现器件或 IP 版本不匹配。安装时勾选 Zynq-7000、Zynq UltraScale+ MPSoC 器件族,以及 Vitis 的嵌入式开发组件。Linux 主机推荐 Ubuntu 20.04 LTS,因为 PetaLinux 对发行版和依赖库版本较敏感。
PetaLinux 安装前需先装依赖,典型命令如下:
sudo apt-get install -y gcc g++ make python3 python3-pip \
libncurses5-dev libssl-dev flex bison texinfo zlib1g-dev \
libgtk2.0-0 tftpd-hpa
# 安装 PetaLinux(示例路径)
./petalinux-v2022.2-10141622-installer.run --dir /opt/pkg/petalinux
source /opt/pkg/petalinux/settings.sh
echo $PETALINUX # 应输出安装路径,验证环境变量生效
Vivado 安装完成后,需确认 vivado -version 与 vitis -version 均可正常输出。若主机同时装有多个版本,建议用环境变量脚本切换,避免工程被高版本工具静默升级。
1.3 硬件与主机环境准备
硬件侧需要一块带 PCIe 金手指的 Zynq 开发板(如 ZCU102、ZC706 或自研板),一根 PCIe 延长线或直接插入主机 PCIe x4/x8 插槽,以及 USB 转串口线用于查看板卡启动日志。主机侧建议使用一台带空闲 PCIe 插槽的 x86 机器,BIOS 中关闭 Secure Boot,避免未签名驱动被拦截。
上电前先做三项检查:一是确认开发板供电与主机供电相互独立,避免 PCIe 插槽供电不足;二是确认 JTAG 与串口线已连接且驱动正常;三是确认 SD 卡已按后续章节烧录镜像。首次上电时,主机执行 lspci -nn | grep -i xilinx,若能看到类似 10ee:9038 的设备号,说明 PCIe 链路已建立、枚举成功;若看不到,应优先检查链路训练状态与参考时钟。
1.4 一个最小可跑通的验证路径
环境搭好后,不要急着写复杂逻辑,先用最小系统验证链路。流程是:在 Vivado 中创建一个仅含 PS + PCIe 硬核的工程,生成 .xsa;用 PetaLinux 导入该 .xsa,生成带 xdma 驱动的镜像并烧录 SD 卡;板卡插入主机后启动,主机侧加载驱动并执行一次 DMA 回环测试。若回环数据与写入数据一致,说明从硬件配置、驱动加载到数据通路全部打通,后续再逐步加入自定义 IP 与业务逻辑。
这一章的目标不是把系统做到最优,而是把“工具装好、板卡点亮、链路可见、数据能通”这条基线建立起来。基线稳定后,后面关于 BAR 映射、DMA 描述符、中断聚合与吞吐优化的内容才有可靠的对照起点。