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

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

3天内不再提示

XDMA/PCIE IP的定制和Block Design的搭建

FPGA之家 来源:CSDN技术社区 作者:朽月 2022-06-01 15:52 次阅读

项目简述

上一篇内容我们已经对PCIE协议进行了粗略的讲解。那么不明白具体的PCIE协议,我们就不能在FPGA中使用PCIE来进行高速数据传输了吗?答案是否定的。因为Xilinx官方给我们提供了完善的PCIE IP,基于这些IP我们设置不需要知道TLP包的组包原理我们便可以把PCIE使用起来。这篇博客我们主要把FPGA作为endpoint来进行讲解,当然也对作为root port进行简单的描述。我们使用的主要IP是XDMA,主要参考资料是米联客。如果对IP的使用感觉到疑惑可以参考米联客的资料

因为手头上硬件条件不够,没办法进行下板测试,我们主要进行介绍IP的定制和Block Design的搭建。

XDMA IP的定制

为什么使用XDMA IP而不使用我们前面介绍的PCIE IP,因为前面介绍的IP需要我们自己构建TLP包,还有分散收集策略,基于该IP使用起来PCIE还是有点困难。但是XDMA就特别简单了,他不需要FPGA设计者熟悉PCIE协议,直接将PCIE协议转换成AXI4与AXI_Lite协议,可以直接对DDR进行操作。XDMA内部的分散收集操作、TLP组包、DMA操作等等进行了完整的封装。我们可以把XDMA IP看成我们经常使用的ZYNQ IP,他的BAR空间被AXI_Lite总线进行读写操作用于寄存器的配置,AXI总线用于大数据的传输直接与DDR对接。

XDMA的内部额框图如下:

a1bf5612-e166-11ec-ba43-dac502259ad0.png

对XDMA的内部描述如下:

1、AXI4、 AXI4-Stream,必须选择其中一个,用来数据传输

2、 AXI4-Lite Master,可选,用来实现PCIE BAR 地址到 AXI4-Lite 寄存器地址的映射,可用来读写用户逻辑寄存器

3、 AXI4-Lite Slave,可选,用来将XDMA 内部寄存器开放给用户逻辑,用户逻辑可以通过此接口访问 XDMA内部寄存器,不会映射到BAR

4、AXI4 Bypass 接口,可选,用来实现PCIE 直通用户逻辑访问,可用于低延迟数据传输

首先选择XDMA IP如下:

a1cd460a-e166-11ec-ba43-dac502259ad0.png

双击点开该IP的配置:

a1ef35d0-e166-11ec-ba43-dac502259ad0.png

1、该IP是作为Endpoint来进行PCIE操作的

2、IP定制的模式是高级,这样一来可供选择的IP定制选项就会增多

3、PCIE硬核的位置,这里我们的芯片只有一个硬核,所以这里默认即可

4、lane的个数,与开发板相对应,这里选择2个

5、XDMA将PCIE转换成AXI协议,这个就是AXI协议的位宽

6、该片子的高速串行接口是GTP口,支持PCIE Gen1 Gen2协议,速度分别是2.5GT/s 5GT/s,这里选择最大速度5 GT/s

7、PCIE参考时钟的频率,与板子的时钟情况有关,这里是100MHz

8、AXI总线的时钟频率,这里我们选择125MHz

9、这里我们直接将PCIE协议转换成AXI协议,而不选择AXI Stream协议,简化我们的操作

a1fd24e2-e166-11ec-ba43-dac502259ad0.png

1、厂商ID,专属于Xilinx的PCIE的ID,是固定的。

2、设备ID,与厂商ID一起指明数据的类型,被使用选择PCIE上位机的软件驱动。

3、版本ID,指明使用该PCIE IP进行设置的版本

4、子厂商ID,用来更近一步的区分Xilinx旗下的厂商

5、子系统ID,用来识别板卡的的ID

6、PCIE在实验中承担的角色,这里我们选择默认即可

a20bb138-e166-11ec-ba43-dac502259ad0.png

1、首先使能 PCIE to AXI Lite Master Interface ,这样可以在主机一侧通过PCIE 来访问用户逻辑侧寄存器或者其他AXI4-Lite 总线设备

2、主机侧PCIE BAR 地址与用户逻辑侧地址是不一样的,这个设置就是进行BAR 地址到AXI 地址的转换,比如主机一侧 BAR 地址为0, IP 里面转换设置为 0x80000000,则主机访问 BAR 地址 0 转换到AXI LIte 总线地址就是0x80000000,这点的理解特别重要

3、选择64bit 使能

4、用来实现PCIE 直通用户逻辑访问,可用于低延迟数据传输,这里不选择。

a24dc3f2-e166-11ec-ba43-dac502259ad0.png

1、选择消息中断,因为下面的工程中使用了2个中断,所以这里我们选择2

2、引脚中断,这里选不选择意义不大

其余的默认设置即可。

a2831a52-e166-11ec-ba43-dac502259ad0.png

1、2、Number of DMA Read Channel(H2C)和Number of DMA Write Channel(C2H)通道数,对于PCIE2.0 来说最大 只能选择 2,也就是 XDMA 可以提供最多两个独立的写通道和两个独立的读通道,独立的通道对于实际应用中 有很大的作用,在带宽允许的前提前,一个PCIE 可以实现多种不同的传输功能,并且互不影响。这里我们选择1。

其余的默认即可。

a2d1fb18-e166-11ec-ba43-dac502259ad0.png

这里我们不共享任何逻辑。

经过上面的设置,我们已经定制了常规的XDMA IP,接下来讲解常用的Block Design设计。

PCIE Endpoint的工程框图

这里我们使用米联客中的一个例子,个人认为这是上面最难的例子了,涉及到了XDMA中断的使用。(这里只做粗略介绍,想详细学习的还是得看米联客官方的资料)

本例子主要讲述基于 PCIE XDMA IP 实现的一个图像传输应用,图像的数据流控制主要用到了 VDMA IP。整个项目的框图如下:

a31c1cd4-e166-11ec-ba43-dac502259ad0.png

由上图可以看出,图像数据是由 PC 端产生,然后用过 XDMA 传输到 ZYNQ 的 DDR3(通过 HP 接口),数据再经过一个 MM2S 的 VDMA 从 ZYNQ 的 DDR(通过 HP 接口)读出到 AXIS 接口,经过 AXIS to VIDEO 转换到视频时序,可以做视频处理,之后再经过 VIDEO to AXIS 转换到 AXIS 接口,经过 MM2S 的 VDMA 存入 DDR, XDMA再从 DDR 将图像数据读出到底 PC。这里面实际上包含了两条传输路径,一条是 PCIE 到视频,一条是视频到 PCIE,一个工程,两个操作例子,很有参考意义。

从上面的工程我们可以学到,FPGA 端主要实现如下功能

1、 XDMA 与 DDR 数据通信

2、 VDMA 实现视频数据搬运

3、 可编程 VTC(Video Timing Control)模块,提供视频时序功能

4、 AXIS to Video 模块,实现 axis 到视频时序的转换

5、 图像处理模块,用户可自定义图像处理功能,例程中实现彩色图像的饱和度调整算法

6、 Video to AXIS 模块,实现视频时序到 AXIS 的转换

7、 用户逻辑寄存器模块,可桥接到 XDMA,实现上位机通过 XDMA 对 FPGA 的寄存器控制

8、 读取本地图像生成图像传输链表

9、 通过 VDMA 的 MM2S 中断来从 WIN64 传输图像到 FPGA DDR

10、通过 VDMA 的 S2MM 中断来从 FPGA DDR 获取图像数据,这些中断是经过XDMA传输到上位机

关于可以学到的XDMA部分我们已经加粗。

项目的Block Design设计图如下:

a34d7f4a-e166-11ec-ba43-dac502259ad0.png

这里主要介绍一下XDMA在上面的Block Design设计中起到的作用。

1、使用PCIE转AXI的总线将图像数据存储到DDR、将DDR中的数据搬移到DDR中

2、通过AXI_Lite接口来配置两个VDMA的IP,使其能够正常工作起来,配置数据是PC机发送来的数据

3、通过AXI_Lite接口来配置Bram,通过这个ram来与PC机进行一定的数据交互,解决图像断帧的现象

4、通过两个VDMA的中断信号使得XDMA产生中断信号,告诉PC机进行一定的处理

上面的Block Design的设计,我们只讲解了XDMA的作用,至于VDMA的作用,这里不再讲解,因为个人认为VDMA IP还是有点鸡肋,因为需要进行配置、数据也需要上游模块主动进行读取写入。这个完全可以用自定义的AXI IP来代替。

如果真把上面的流程搞明白了,那么可以熟练的实现FPGA开发板通过XDMA与PC机之间的通信。可以熟练掌握PCIE的使用。但是,上面的使用需要经过上位机的配合,至于上位机的书写,我没有掌握的太好,就不多加解释,这个例子在米联客的PCIE教程中有,同学们可以去学习。

PCIE IP的定制

上面我们已经讲解了PCIE作为endpoint如何进行配置与Block Design的搭建。接下来,我们讲解PCIE作为rootpoint如何来进行PCIE的配置与Block Design的设置。

首先点击PCIE IP核:

a378b8c2-e166-11ec-ba43-dac502259ad0.png

a3ab9ee0-e166-11ec-ba43-dac502259ad0.png

1、这里选择root port

2、选择开发板上的时钟100MHz

a3dd0bf6-e166-11ec-ba43-dac502259ad0.png

1、这里选择硬核PCIE所在的位置

2、选择PCIE的lane的个数为2个

3、选择PCIE的通信速度为5GT/s

a405c03c-e166-11ec-ba43-dac502259ad0.png

1、厂商ID,专属于Xilinx的PCIE的ID,是固定的。

2、设备ID,与厂商ID一起指明数据的类型,被使用选择PCIE上位机的软件驱动。

3、版本ID,指明使用该PCIE IP进行设置的版本

4、子厂商ID,用来更近一步的区分Xilinx旗下的厂商

5、子系统ID,用来识别板卡的的ID

6、PCIE在实验中承担的角色,这里我们选择默认即可

a42c6fde-e166-11ec-ba43-dac502259ad0.png

1、PCIE To AXI的BAR地址空间设置,用于IO的配置空间,也是endpoint to rootport的方向

a4592a6a-e166-11ec-ba43-dac502259ad0.png

默认即可

a4821ef2-e166-11ec-ba43-dac502259ad0.png

1、2、AXI TO PCIE的BAR空间,也就是rootport to endpoint可以看见的方向。

a4d232fc-e166-11ec-ba43-dac502259ad0.png

1、2、AXI总线的最低地址与最高地址

a51aefa6-e166-11ec-ba43-dac502259ad0.png

默认即可

a570eb54-e166-11ec-ba43-dac502259ad0.png

默认即可。

PCIE root port的Block Design搭建

这里直接给出相应的图像,供大家简略学习:

a59ece52-e166-11ec-ba43-dac502259ad0.png

1、是endpoint读写rootport的数据通路

2、是rootport读写endpoint的数据通路

上面Block design的搭建其实我一直不明白centerDMA Ip的作用,也没真正下板实现过,这里也就不多说了。因为FPGA作为rootport来使用,本身就很少见。

上面的内容,我们主要介绍了VIVADO中PCIE IP的使用,介绍的比较粗略。尤其是第一个很常用,想进一步了解的同学可以找一找原本的资料,这里我只是介绍了自己的想法。

原文标题:基于FPGA的PCIE设计(2)

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红

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

    关注

    1625

    文章

    21644

    浏览量

    601401
  • Xilinx
    +关注

    关注

    71

    文章

    2160

    浏览量

    120902
  • PCIe
    +关注

    关注

    15

    文章

    1213

    浏览量

    82383
  • design
    +关注

    关注

    0

    文章

    156

    浏览量

    45698

原文标题:基于FPGA的PCIE设计(2)

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【米尔-Xilinx XC7A100T FPGA开发板试用】+02.PCIE接口测试(zmj)

    通信速率可高达 5G bit 带宽。本例程中通过利用 XILINX 的 XDMA IP 来实现 PCIE 的发送和接收速度测试。 1.1参考电路 米尔-Xilinx XC7A100T FPGA开发板
    发表于 11-12 16:05

    求解 validate design时候出现了IP核被lock的问题

    创建项目,然后create block,然后将ad7616核添加之IP核仓库并添加到design中后,开始validate design的时候出现了
    发表于 07-31 09:47

    创建Block RAM IP不起作用

    DCM_SP为spartan 3E创建50Mhz DCM时钟的IP,并且它可以工作。我不确定为什么当我尝试创建Block RAM IP时它不起作用。我真的很感激一些帮助。欢迎来到Xilinx CORE
    发表于 06-05 13:39

    ZYNQ调用XDMA PCIE IP同时读写PS DDR,导致蓝屏问题。

    你好!我在ZYNQ 7015里(或者7035)调用XDMA PCIE IP 从上位机HOST PC通过PCIE接口给ZYNQ的PS DDR发送数据(
    发表于 11-21 10:35

    PCIE XDMA IP核介绍

    结构图这是PCIE IP核,主要用来发送数据,发送引擎主要负责将待发送数据按照PCIE协议组织成不同类型的TLP数据包,并发送给PCIE IP
    发表于 12-26 10:46

    如何使用Vivado IP Block Design

    对你所有的人来说,我已经阅读了有关IP Block Designs的手册和培训材料,并成功地生成了AXI LITE BRAM IP设计,以及之前在USER社区中为您提供的一些帮助。我所坚持
    发表于 03-20 08:52

    XDMA加载驱动程序失败怎么办

    你好,我在流模式下使用XDMA 3.1 IP内核。我想加载Linux XDMA驱动程序,但看起来脚本会读取所写内容以确定硬件是否存在。由于我正在流式传输,我无法读取我写的内容,这使
    发表于 05-22 12:15

    基于PCIe和V4L2的8通道视频采集&显示IP

    基于PCIe和V4L2的8通道视频采集&显示IPVideo Capture&Display IP for V4L2在主机端视频设备内核驱动V4L2 的控制和调度下,Video
    发表于 11-01 21:45

    基于PCIe DMA的多通道数据采集和回放IP

    基于PCIe DMA的多通道数据采集和回放IP在主机端PCIe驱动的控制和调度下,数据采集与回放IP Core可以同时完成对多个通道数据的采集以及回放驱动工作,既可采用行缓存机制(无需
    发表于 11-25 22:27

    PCIE高速传输解决方案FPGA技术XILINX官方XDMA驱动

    ,使用 XILINX 官方 XDMA IP 核配合板载高速 DDR3,可对前端 ADC 产生的不大于 4.5GB/s 的连续或非连续数据进行实时采集,同时该采集卡具备数据发送功能,可以将用户文件或者内存中
    发表于 05-19 08:58

    使用 PCIE 更新 AMD ZYNQ™ 的 QSPI Flash 参考设计

    。 教程中所有涉及的设计及代码均在 Windows 和 Linux(Ubuntu20.04)平台下作了验证。 系统设计 系统设计框图参考如下。在设计实例化了一个 XDMA IP,通过其 M_AXI 端口连接
    发表于 11-30 18:49

    Block Design中的Bug的解决办法及解决思路

    Block Design 作为VIVADO的一大新神器,给用户设计带来了极大的方便,能够根据用户的定制需求自动选择、组合以及连接不同的IP。然而,其中不可控的Bug也给用户带来了一定的
    发表于 02-09 09:44 8413次阅读
    <b class='flag-5'>Block</b> <b class='flag-5'>Design</b>中的Bug的解决办法及解决思路

    PCIE通信技术:通过AXI-Lite ip配置的VDMA使用

    XDMA是Xilinx封装好的PCIE DMA传输IP,可以很方便的把PCIE总线上的数据传输事务映射到AXI总线上面,实现上位机直接对AXI总线进行读写而对
    的头像 发表于 12-28 10:17 3137次阅读

    基于VIVADO的PCIE IP的使用

    基于VIVADO的PCIE IP的使用 项目简述 上一篇内容我们已经对PCIE协议进行了粗略的讲解。那么不明白具体的PCIE协议,我们就不能在FPGA中使用
    的头像 发表于 08-09 16:22 1.2w次阅读
    基于VIVADO的<b class='flag-5'>PCIE</b> <b class='flag-5'>IP</b>的使用

    基于FPGA的PCIE通信测试

    本文介绍一个FPGA开源项目:PCIE通信。该工程围绕Vivado软件中提供的PCIE通信IPXDMA IP建立。Xilinx提供了
    的头像 发表于 09-04 16:45 2852次阅读
    基于FPGA的<b class='flag-5'>PCIE</b>通信测试