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

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

3天内不再提示

基于AMD FPGA的PCIE DMA逻辑实现

jf_pJlTbmA9 来源:jf_pJlTbmA9 作者:jf_pJlTbmA9 2023-07-14 15:53 次阅读

一、AMD FPGA PCIE IP介绍

AMD FPGA自带PCIE硬核,实现了PCIE协议,把串行数据转换为并行的用户数据,以UltraScale系列FPGA为例,其支持Gen1.02.03.04.0,1~16 Lanes,如下图所示:

100571679-305868-01.png

另外当前最新7nm系列器件Versal® ACAP可支持到PCIE Gen5.0,单个Lane可达32G的线速率,如下图所示:

100571679-305869-02.png

1.1 PCIE IP功能介绍

用户接口采用AXI接口实现PCIE TLP报文收发,从而完成PCIE传输事务的收发,最终实现PCIE的各种数据传输模式,系统架构如下图所示:

100571679-305870-03.png

图左侧为FPGA PCIE IP,实现了PCIE协议,其与用户逻辑的数据交互主要通过AXI CQ,CC,RQ,RC四个接口,可以实现PCIE上行和下行的数据传输。

1.2 PCIE协议TLP报文介绍

使用PCIE IP用户需要了解PCIE协议,至少了解TLP报文的构造,如下图所示为32位地址写请求TLP报文:

100571679-305871-04.png

R:保留位,一般填0;
Fmt:报文长度类型,指示当前TLP报文是3DW长度还是4DW长度(此处主要是跟地址位宽相关,PCIE协议可支持32位地址和64位地址);
Type:包类型,指示包括Mrd(读数据)、Mwr(写数据)、Cfg(配置PCIe)、Msg(消息事务)、Cpl(读地址数据请求后返回的数据包);
TC:传输优先级,数值越大表示优先级越高;
Attr:包属性,指示当前包是顺序或者是乱序,cache一致性等;
TH:PCIe V2.1 总线规范引入的一个重要功能。TLP 的发送端可以使用 TPH 信息,通知接收端即将访问数据的特性,以便接收端合理地预读和管理数据,一般很少应用;
TD:指示接收端是否需要做ECRC校验;
EP:指示当前TLP包的有效性;
AT:地址种类,与 PCIe 总线的地址转换相关;
Length:指示TLP长度;
Requester ID:请求者ID,包括PCIe设备的总线号(Bus Number)、设备号(Device Number)和功能号(Function Number),通过该ID可以找到对应的目标设备;
Tag:数据包标签,可以指示当前TLP数据包是属于哪一组数据中分拆的数据块;
Last DW BE:指示最后一个DW中有效的字节,主要是针对在传输数据粒度比较小的情况,比如最小粒度为1字节;
1st DW BE:指示第一个DW中有效的字节。

1.3 PCIE IP逻辑设计

用户在实现PCIE数据传输功能时可通过上图中AXI CQ,CC,RQ,RC四个接口来完成各种PCIE事务的数据收发:
RQ:请求者请求接口,通常是主机向终端设备发送数据传输请求;
RC:请求者完成接口,通常是终端设备向主机发送需要的返回数据;
CQ:完成者请求接口,通常是终端设备向主机发送数据传输请求;
CC:完成者完成接口,通常是主机向终端设备发送需要的返回数据;

用户需要通过这4个接口构造TLP报文可以实现从主机到终端或者终端到主机的访问请求和相应的数据传输,下面是主机向终端发起写数据请求的时序:

100571679-305872-05.png

用户在逻辑设计时可以先通过右键IP生成一个example工程,工程里面就有构造TLP报文的代码,用户可以在这个工程代码上修改TLP报文的相关数据来实现具体的数据传输需求。

二、AMD PCIE DMA功能实现

AMD PCIE DMA功能主要是通过XDMA IP来实现,其作用本质上是通过这几个接口实现PCIE DMA传输流程,用户不需要关注PCIE TLP报文的构造细节,只需要通过XDMA的AXI接口完成数据传输即可,如下图所示:

100571679-305873-06.png

用户只需关注AXI用户接口的逻辑设计,通过该接口就可以实现DMA传输。另外,AXI用户接口包括MM接口和ST两种接口,MM接口是可以直接对接内存,其包括了地址控制,可以直接实现内存读写。

2.1 XDMA AXI-MM接口实现DMA传输

AXI-MM接口的操作相对简单,其与用户逻辑对接的接口为标准的AXI接口,包括了地址信息,可以直接对接内存,最简单的方式就是例化一个AXI接口的RAM直接对接,PC端就可以直接访问该RAM,如下图所示:

100571679-305875-07.png

AXI-MM接口主要应用场景是直接访问FPGA内存,但对于视频流,采集数据流等场景,特别是需要用到多通道的场景通常采用ST接口会更加方便。

2.2 XDMA ST接口实现DMA传输

ST(AXI4-Stream)接口是实现数据流传输接口,用于传输连续的数据流,比如视频数据流,特别是在实现多通道DMA的情况下通常会采用该接口,如下图所示:

100571679-305876-08.png

S_AXIS_C2H是终端设备向主机发送数据接口,S_AXIS_H2C是主机向终端设备发送数据接口,均为AXI Stream接口,只实现数据流传输,典型特征是不传输地址,其端口如下图所示:

100571679-305877-09.png

其时序跟上述PCIE IP的AXI接口类似,所以,通过XDMA的ST接口可以很方便实现数据流传输,只需要跟PC驱动程序配对好地址和长度信息,逻辑设计只需要通过ST接口收发数据。

2.3 DMA逻辑设计方法

逻辑与主机上层软件实现DMA数据传输主要有查询和中断两种方式,以ST接口为例,逻辑可以通过AXI LITE接口实现PC的寄存器访问,PC可以通过查询寄存器来确定是否可以启动DMA下发数据,或者通过发起DMA获取逻辑需要上传的数据,逻辑根据当前数据需要上传或者允许PC下发数据的具体情况来设置寄存器的状态。
中断模式首先要在例化XDMA IP时要选择一个中断,IP自动生成一个可供用户产生中断的接口,时序如下图所示:

100571679-305878-10.png

用户产生中断的方法很简单,只需要拉高usr_irq_req,等待usr_irq_ack拉高即可产生中断。需要注意的是当usr_irq_ack拉高时用户不能立刻把usr_irq_req拉低,因为此刻不能确定PC已经响应并完成中断处理,最简单的方式是设置一个清中断寄存器,PC通过向这个寄存器写1来通知逻辑,中断事务已经被处理完成。

另外,PCIE协议支持3种中断:
INTx中断:主要是为了兼容PCI设备,是电平触发中断;
MSI中断:消息中断,PCIE设备通过构造对应的中断消息发送到主机,从而触发中断;
MSI-X中断:是MSI中断的扩展,可以通过中断向量表的方式把中断个数扩展到2048个;

当PC启动DMA下发数据时,XDMA IP会通过H2C接口向逻辑发送数据,逻辑可以通过s_axis_h2c_tready信号来决定是否允许数据下发;当逻辑向PC上传数据时可通过C2H接口向PC传输数据,在发送数据前逻辑需要向PC产生一个中断,PC检测到中断后就会启动DMA上传数据,逻辑侧看到的是s_axis_c2h_tready信号拉高,说明逻辑可以开始通过C2H接口发送数据给PC。所以,整个DMA传输都是由PC发起的,无论是上传还是下发数据,逻辑只是被动完成数据传输。

值得注意的是当使用多通道DMA时每个通道的操作是完全独立的,包括ST接口和中断都是独立的,相关的寄存器用户最好也采用独立的寄存器来实现与PC的交互。

责任编辑:彭菁

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

    关注

    1602

    文章

    21320

    浏览量

    593199
  • amd
    amd
    +关注

    关注

    25

    文章

    5197

    浏览量

    132633
收藏 人收藏

    评论

    相关推荐

    Xilinx FPGA 1/4/8通道PCIe-DMA控制器IP,高性能应用介绍

    Integrated Block,Multi-Channel PCIe RDMA Subsystem实现了使用DMA Ring缓冲的独立多通道、高性能/超低延时/超低抖动Continous Ring
    发表于 03-07 13:54

    基于Xilinx V6的PCIE DMA高速传输模块

    利用XIlinx V6评估板ML605实现PCIE2.0,8通道主模式DMA数据传输,DMAFPGA发起,采用1GB DDR3作为
    发表于 04-25 12:48

    Xilinx PCIe Master DMA设计

    基于PCI Express的数据采集卡PCIe数据采集卡PCI Express数据采集卡本人在北京工作6年以上,从事FPGA外围接口设计,非常熟悉PCI Express协议,设计调试了多个基于PCI
    发表于 03-01 18:11

    PCIe DMA设计实现

    基于PCI Express的数据采集卡PCIe数据采集卡PCI Express数据采集卡在北京工作6年以上,从事FPGA外围接口设计,非常熟悉PCI Express协议,设计调试了多个基于PCI
    发表于 01-10 20:36

    pc如何通过pcieFPGA通信

    FPGA实现 PCIE 端点设备,我该如何实现这样一个功能,PC发送一条消息(比如一个存储器写事务),然后FPGA用户
    发表于 03-12 10:48

    关于PCIE DMA操作的一个疑问

    功能,1、FPGA是不是可以直接通过PCIE操作DDR完成DMA操作?2、在操作过程中CPU是一个旁观者的角色吗?3、地址转换,DDR接口操作等都是由CPU内部的硬件完成?CPU在FPGA
    发表于 04-06 16:24

    寻求fpga大牛开发一个简单的fpga pcie设备

    需求:两块fpga互联,两块fpga分别模拟成特定的pcie设备,两个设备通过serdes总线互联通信,fpga仅仅只要模拟特定的设备就可以,不需要负载的
    发表于 02-11 15:31

    采用FPGA实现PCIe接口设计

    系列FPGA实现PCIe接口所涉及的硬件板卡参数、应用层系统方案、DMA仲裁、PCIe硬核配置与读写时序等内容。
    发表于 05-21 09:12

    如何通过PCIe进行FPGA到PC的通信?

    嗨,我正在使用超大规模的FPGA板。我可以通过DMA子系统IP和DDR控制器IP将数据从PC传输到DDR。我打算在FPGA中进行一些处理,然后更新数据,以便PC可以读取。如何通过PCIe
    发表于 05-08 09:40

    如何利用PCIe DMA总线实现一个基于FPGAPCIe 8位数据采集卡?

    PCIe总线通信过程是怎样的?是什么原理?如何利用PCIe DMA总线实现一个基于FPGAPCIe
    发表于 09-17 07:16

    关于xilinx FPGA pcie测试问题

    FPGA pcie dma测试 流程:金手指和电脑连接之后,先加载程序,pc重启; 现象:pc无法开机。 FPGA pcie x8,pc x
    发表于 09-13 18:21

    PCIE DMA例子

    Xilinx FPGA工程例子源码:PCIE DMA例子
    发表于 06-07 14:13 48次下载

    基于FPGAPCIe总线接口的DMA控制器的实现并进行仿真验证

    本文实现的基于FPGAPCIe总线接口的DMA控制器是在Altera PHY IP和Synopsys Core IP的基础上实现的,
    的头像 发表于 01-11 10:57 1.1w次阅读
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>PCIe</b>总线接口的<b class='flag-5'>DMA</b>控制器的<b class='flag-5'>实现</b>并进行仿真验证

    基于AMD FPGAPCIE DMA逻辑实现

    AMD FPGA自带PCIE硬核,实现PCIE协议,把串行数据转换为并行的用户数据,以UltraScale系列
    的头像 发表于 06-09 09:34 973次阅读
    基于<b class='flag-5'>AMD</b> <b class='flag-5'>FPGA</b>的<b class='flag-5'>PCIE</b> <b class='flag-5'>DMA</b><b class='flag-5'>逻辑</b><b class='flag-5'>实现</b>

    Xilinx高性能PCIe DMA控制器IP,8个DMA通道

    基于PCI Express Integrated Block,Multi-Channel PCIe QDMA Subsystem实现了使用DMA地址队列的独立多通道、高性能Continous
    的头像 发表于 02-22 11:11 300次阅读
    Xilinx高性能<b class='flag-5'>PCIe</b> <b class='flag-5'>DMA</b>控制器IP,8个<b class='flag-5'>DMA</b>通道