0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

双Zynq MPSoC PS侧PCIe高速DMA互连解决方案

安富利 来源:安富利 2025-10-22 13:53 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

引言

在涉及Xilinx Zynq UltraScale+ MPSoC的项目中,实现设备间高速、低延迟的数据传输往往是核心需求之一。PCIe(尤其PS侧)结合DMA(直接内存访问)正是满足这类需求的理想技术方案。

在近期支持的客户项目中,其核心需求在于:在一款PCB单板上,集成两颗Zynq MPSoC器件,并利用其PS侧的PCIe控制器,直接构建点对点DMA数据传输链路,从而避免引入额外的PCIe交换芯片。为了验证该方案的可行性并积累经验,我们使用两块ZCU102开发板成功搭建并测试了一个工作Demo。

这篇文章将聚焦这一实战过程,手把手带你完成:环境搭建、硬件配置、驱动移植、系统编译到最终的上板测试验证,目标是帮你快速在你的MPSoC项目上实现类似的高速DMA互连!

一、实战准备:软硬件环境搭建

1.1硬件准备

开发板:两块Xilinx ZCU102开发板。

连接线:一根PCIe公对公延长线缆。

角色分配

板卡1:配置为RC(Root Complex)。

板卡2:配置为EP(Endpoint)。

物理连接:将两块板的PS侧PCIe插槽通过延长线缆直接相连(如下图所示)。

af2f8654-a8dd-11f0-8c8f-92fbcf53809c.png

1.2 软件准备

软件版本

Vivado:2021.2(用于硬件设计和比特流生成)。

PetaLinux:2021.2(用于嵌入式Linux系统构建)。

1.3 驱动准备

(Xilinx PCIe Root and EndPoint - Xilinx Wiki - Confluence[1])我们需对其进行交叉编译以生成适用于ARM64架构的内核模块(.ko)。

注:

[1]https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/85983409/Xilinx+PCIe+Root+and+EndPoint(复制到浏览器打开)

af9b7ab2-a8dd-11f0-8c8f-92fbcf53809c.png

二、详细实现过程拆解

2.1 硬件设计(RC端配置-Vivado)

① 创建block design后,添加“Zynq Ultrascale+ MPSoC” IP。

② 运行Block automation,进行基础配置。

③ 注意将自动生成的“maxihpm0_fpd_aclk”和“maxihpm1_fpd_aclk”与“pl_clk0”连线,否则会导致后面validate不通过。

④ Vivado通常已自动分配管脚,默认模式为RC,使用GT Lane 0。在“IO Configuration”的页面可以看到,PCIE默认配置为Gen2 x1,其他GT Lane分别配置给DP/USB3.0/SATA。本实验使用默认配置。

aff95da8-a8dd-11f0-8c8f-92fbcf53809c.png

⑤ PCIE高级配置,勾选“Switch To Advanced Mode”。

确保Class Code值设置为0x060400(代表PCI-to-PCI Bridge)。如果使用错误的类代码,Linux在枚举时可能导致BAR分配失败!其余高级配置一般可用默认值。

b056ed60-a8dd-11f0-8c8f-92fbcf53809c.png

⑥ 配置完成后,按照“Generate Output Products” ->“Create HDL Wrapper”->“Generate Bitstream”的流程。成功生成比特流后,导出.xsa文件,用于PetaLinux系统构建。

2.2 构建Linux系统(RC端-Petalinux)

① petalinux工程创建

petalinux-create --type project -s xilinx-zcu102-v2021.2-final.bsp -n zcu102_rc

② 导入硬件描述(.xsa)

petalinux-config -- get-hw-description = (path of zcu102_rc.xsa)

③ 配置Linux内核

petalinux-config -c kernel

由于内核配置中默认开启了ps PCIe的DMA,为了避免后面安装外部驱动时冲突,这里需要去掉Xilinx PS PCIe DMA support的默认勾选。

b0c0316c-a8dd-11f0-8c8f-92fbcf53809c.png

④ 编译工程

petalinux-build

⑤ 打包文件

petalinux-package --boot --fsbl zynqMP_fsbl --u-boot u-boot.elf --force

生成BOOT.BIN、image.ub、boot.scr等关键启动文件。将上述生成的启动文件复制到SD卡的boot分区。

2.3 编译移植PS PCIE DMA驱动(RC端)

① 获取并修改驱动源码:从Xilinx Wiki获取驱动源码。由于官方提供的驱动源码是在X86 host上编译执行的,还需要将其修改为可在ARM上执行的ko文件,即交叉编译。

② 修改Makefile,将KERNEL_DIR指定为本地内核代码所在路径。内核路径示例(请根据实际路径修改):

/home/your_user_name/petalinux_pro/peta_2021/zcu102_rc/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+gitAUTOINC+568989d441-r0/linux-zynqmp_generic-standard-build。

③ 在驱动源码目录执行make命令,成功编译后会生成ps_PCIe_dma.ko内核模块文件。

④ 将编译生成的ko文件、apps路径下的simple_test应用文件以及petalinux打包好的Boot.bin、image.ub和boot.scr都拷贝至SD。

2.4 硬件准备(EP端)

① vivado配置(类似RC,但关键点不同)

a.在IO configuration中明确将PCIe模式设置为Endpoint。

b.关键修改,将Device ID修改为“0XA808”。此值必须与驱动源码中ZYNQMP_DMA_DEVID1定义的预期设备ID严格匹配,否则驱动无法正常运行。

b120e75a-a8dd-11f0-8c8f-92fbcf53809c.png

② 生成并导出硬件设计。

③ 创建EP端Boot文件,在vitis中:基于导出的.xsa文件新建Vitis平台工程。创建一个简单的Hello World应用程序工程(仅用于加载运行基本固件)。将其复制到EP板SD卡。

2.5上板实测

① 上电启动:

将准备好的SD卡(含boot文件)分别插入两块ZCU102。

两块板均设置为SD卡启动模式。

连接RC板的串口到主机终端(如PuTTY或minicom)。

② EP枚举观察(RC串口输出):

给两块板上电。

在RC板的串口终端中,你应该能看到类似XXX:PCI host bridge /PCIe@fd0e0000 ranges:和XXX:PCIe:Link up的日志信息,这表明PCIe链路已成功建立并枚举到EP设备。

b1856fb8-a8dd-11f0-8c8f-92fbcf53809c.png

③ 加载驱动(RC端命令):

在RC板的Linux命令行中,进入存放驱动的目录。

执行:insmod ps_pcie_dma.ko

检查设备节点:成功加载后,/dev/PCIe(例如/dev/ps_pcie_epdma0)等设备节点应被创建。

b1e30c54-a8dd-11f0-8c8f-92fbcf53809c.png

④ 运行DMA测试程序(RC端命令):

执行命令进行传输测试(以下仅为示例命令,具体参数需看程序说明):./simple_test

b23e9736-a8dd-11f0-8c8f-92fbcf53809c.png

⑤ 测试结果解读:

程序运行后,终端会打印传输的速度数据。

在我们的测试中(Gen2 x1链路):

RC -> EP(写入EP内存):传输4MB数据,平均速度约为372MB/s。

EP -> RC(写入RC内存):传输4MB数据,平均速度约为378MB/s。

本文详细展示了如何利用两块Xilinx Zynq UltraScale+ MPSoC ZCU102开发板,通过配置其PS侧PCIe控制器分别作为RC和EP,最终实现了两者之间基于DMA驱动的高速数据互传功能。该方案验证了在MPSoC设计中直接利用片上PCIe资源构建高速点对点链路的可行性。

关于安富利

安富利是全球领先的技术分销商和解决方案提供商,在过去一个多世纪里一直秉持初心,致力于满足客户不断变化的需求。通过遍布全球的专业化和区域化业务覆盖,安富利可在产品生命周期的每个阶段为客户和供应商提供支持。安富利能够帮助各种类型的公司适应不断变化的市场环境,在产品开发过程中加快设计和供应速度。安富利在整个技术价值链中处于中心位置,这种独特的地位和视角让其成为了值得信赖的合作伙伴,能够帮助客户解决复杂的设计和供应链难题,从而更快地实现营收。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 安富利
    +关注

    关注

    6

    文章

    519

    浏览量

    63747
  • dma
    dma
    +关注

    关注

    3

    文章

    582

    浏览量

    106275
  • 开发板
    +关注

    关注

    26

    文章

    6420

    浏览量

    120895
  • Zynq
    +关注

    关注

    10

    文章

    633

    浏览量

    49573

原文标题:AMD技术干货|双Zynq MPSoC PS侧PCIe高速DMA互连

文章出处:【微信号:AvnetAsia,微信公众号:安富利】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于AMD Versal器件实现PCIe5 DMA功能

    Versal是AMD 7nm的SoC高端器件,不仅拥有比16nm性能更强的逻辑性能,并且其PS系统中的CPM PCIe也较上一代MPSoC PS硬核
    的头像 发表于 06-19 09:44 2025次阅读
    基于AMD Versal器件实现<b class='flag-5'>PCIe</b>5 <b class='flag-5'>DMA</b>功能

    看门狗在Zynq MPSoC上的使用技巧

    Zynq MPSoC的器件里,PS (Processing System )集成了三个看门狗,分别是CSU SWDT,LPD SWDT和FPD SWDT。
    的头像 发表于 06-30 09:47 3471次阅读
    看门狗在<b class='flag-5'>Zynq</b> <b class='flag-5'>MPSoC</b>上的使用技巧

    如何利用ZYNQ MPSoC玩DOOM?

    赛灵思和 DornerWorks 的系统软件团队在赛灵思的 Zynq® Ultrascale+™ MPSoC 上启动 Xen Project 管理程序时,我们发现可通过运行当年叱诧一时的流行电子游戏
    发表于 10-09 06:21

    请问Zynq Ultrascale + MPSOC本身是否存在问题?

    你好我们正在考虑在我们的新设计中使用Zynq Ultrascale + MPSOC。我们想在我们的电路板设计中加入HDMI接口。 Zynq Ultrascale + MPSOC
    发表于 10-14 09:17

    如何调试Zynq UltraScale+ MPSoC VCU DDR控制器

      如何调试Zynq UltraScale+ MPSoC VCU DDR控制器  Zynq UltraScale+ MPSoC VCU DDR 控制器是一款专用 DDR 控制器,只支持
    发表于 01-07 16:02

    ZYNQ Ultrascale+ MPSOC FPGA教程

    ZYNQ Ultrascale+ MPSOC FPGA教程
    发表于 02-02 07:53

    ZYNQ中不同应用的DMA总结

    不同类型的DMAHigh performance w/DMA几种DMA的总结ZYNQ中不同应用的DMA几个常用的 AXI 接口 IP 的功能(上面已经提到):AXI-
    发表于 03-31 11:39

    Ti推出面向Zynq UltraScale+ MPSoC的电源参考设计

    本篇文章将与大家讨论的是Xilinx Zynq UltraScale+ MPSoC的电源解决方案参考设计。
    发表于 03-14 02:24 4235次阅读
    Ti推出面向<b class='flag-5'>Zynq</b> UltraScale+ <b class='flag-5'>MPSoC</b>的电源参考设计

    Zynq UltraScale MPSOC数据手册免费下载

    Zynq UltraScale+™ MPSOC系列基于Xilinx UltraScale™MPSOC体系结构。该系列产品在单个设备中集成了功能丰富的64位四核或核ARM®Cortex
    发表于 02-21 16:48 22次下载
    <b class='flag-5'>Zynq</b> UltraScale <b class='flag-5'>MPSOC</b>数据手册免费下载

    米尔科技Zynq UltraScale+ MPSoC技术参考手册介绍

    Zynq UltraScale+ MPSoC是Xilinx推出的第二代多处理SoC系统,在第一代Zynq-7000的基础上做了全面升级,在单芯片上融合了功能强大的处理器系统(PS)和用
    的头像 发表于 11-18 11:03 4405次阅读
    米尔科技<b class='flag-5'>Zynq</b> UltraScale+ <b class='flag-5'>MPSoC</b>技术参考手册介绍

    FPGA、ZynqZynq MPSoC三种器件的特点介绍

    FPGAs,ZynqZynq MPSoCZynq MPSoCZynq-7000 So
    的头像 发表于 04-02 17:20 1.9w次阅读
    FPGA、<b class='flag-5'>Zynq</b>和<b class='flag-5'>Zynq</b> <b class='flag-5'>MPSoC</b>三种器件的特点介绍

    FPGAs,ZynqZynq MPSoC器件的特点

    Zynq MPSoCZynq-7000 SoC(之后简称Zynq)的进化版本。Zynq是赛灵思发布的集成PL(FPGA)和
    的头像 发表于 08-15 09:16 4116次阅读

    Zynq UltraScale ZU19EG MPSOC评估板

    设计解决方案、IP 验证、图形、视频、数据包处理和早期的软件开发。 Xilinx Zynq UltraScale+ ZU19EG-FFVB1517 MPSoC 与其他 Zynq
    发表于 09-26 11:28 7次下载

    AMD MPSoC PS PCIe使用要点

    有客户需要通过PCie从Windows系统访问MPSoC的DDR,从而使X86和A53通过共享DDR内存的方式交互大量数据
    的头像 发表于 07-10 16:52 2381次阅读
    AMD <b class='flag-5'>MPSoC</b> <b class='flag-5'>PS</b> <b class='flag-5'>PCIe</b>使用要点

    Amphenol PCIe® Gen 6 Mini Cool Edge IO连接器:下一代高速互连解决方案

    Amphenol PCIe® Gen 6 Mini Cool Edge IO连接器:下一代高速互连解决方案高速
    的头像 发表于 12-10 11:10 670次阅读