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
    +关注

    关注

    1664

    文章

    22571

    浏览量

    640670
  • Xilinx
    +关注

    关注

    73

    文章

    2209

    浏览量

    132167
  • PCIe
    +关注

    关注

    16

    文章

    1502

    浏览量

    89129
  • design
    +关注

    关注

    0

    文章

    165

    浏览量

    48297

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于PCIeXDMA/QDMA)的多路视频采集与显示IP 多路高速AD采集与DA回放IP

    基于PCIeXDMA/QDMA)的多路视频采集与显示子系统多路高速AD采集与DA回放子系统1 概述视频采集与显示子系统可以实时采集多路视频信号,并存储到视频采集队列中,借助高效的硬实时视频帧出入
    发表于 04-14 15:17

    NVMe高速传输之摆脱XDMA设计43:如何上板验证?

    仿真验证之后, 搭建硬件测试平台, 测试本IP在实际应用环境中的功能与性能。本IP基于 Xilinx PCIe Integration Block
    发表于 10-30 18:10

    创建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

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

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

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

    Block Design 作为VIVADO的一大新神器,给用户设计带来了极大的方便,能够根据用户的定制需求自动选择、组合以及连接不同的IP。然而,其中不可控的Bug也给用户带来了一定的
    发表于 02-09 09:44 9730次阅读
    <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 4483次阅读

    基于VIVADO的PCIE IP的使用

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

    PCIE XDMA开发环境搭建以及环路测试

    1.1 课程介绍  这一章开始主要介绍 XILINX FPGA PICE IP XDMA IP的使用。XDMA IP使用部分教程分LINUX
    的头像 发表于 01-13 09:38 3276次阅读
    <b class='flag-5'>PCIE</b> <b class='flag-5'>XDMA</b>开发环境<b class='flag-5'>搭建</b>以及环路测试

    NVMe IP over PCIe 4.0:摆脱XDMA,实现超高速!

    基于NVMe加速引擎,它直接放弃XDMA,改为深度结合PCIe,通过高速传输机制开发。同时利用UVM验证平台验证,有效提升工作效率。
    的头像 发表于 04-16 14:57 1126次阅读
    NVMe <b class='flag-5'>IP</b> over <b class='flag-5'>PCIe</b> 4.0:摆脱<b class='flag-5'>XDMA</b>,实现超高速!

    NVMe IP高速传输却不依赖XDMA设计之八:系统初始化

    采用XDMA是许多人常用xilinx库实现NVMe或其他传输的方法。但是,XDMA介绍较少,在高速存储设计时,尤其是PCIe4.0模式下,较难发挥其最优性能,因此,直接采用PCIe实现
    的头像 发表于 07-26 15:14 1015次阅读
    NVMe <b class='flag-5'>IP</b>高速传输却不依赖<b class='flag-5'>XDMA</b>设计之八:系统初始化

    NVMe IP高速传输却不依赖XDMA设计之九:队列管理模块(上)

    这是采用PCIe设计NVMe,并非调用XDMA方式,后者在PCIe4.0时不大方便,故团队直接采用PCIe设计,结合UVM验证加快设计速度。 队列管理模块采用队列的存储与控制分
    的头像 发表于 08-04 09:53 891次阅读
    NVMe <b class='flag-5'>IP</b>高速传输却不依赖<b class='flag-5'>XDMA</b>设计之九:队列管理模块(上)