当前位置:   article > 正文

一文搞懂XDMA核详细配置,手把手教你学会用IP,让你不在挠头

xdma

一、相关知识

  1. 当数据从上位机通过PCIe接口发送到端点设备,XDMA内部自行解包对将数据与指令进行分析,得到读写操作的指令地址,并对DDR进行读写操作。操作的结果通过AXI接口返回XDMA,XDMA对数据进行组包,之后通过物理层发出,实现数据的DMA控制。
  2. 绝对地址就是物理地址=段地址*16+偏移地址,也就是段地址

         读写部分分为两种,一种是数据的读写,另一种数配置数据的读写,在数据读写部分,DMA通过MIG控制DDR完成数据读写。配置数据读写通过与BRAM通过AXI-lite总线连接完成,XDMA将PCIe配置信息存在BRAM,在进行配置信息读写时,将传入主机映射到用户逻辑的地址,然后与偏移地址处理(物理地址=段地址

对于DDR则不必,设置的话还减少了可使用的内存空间,只是一个袋子,写在哪里就从哪里读取即可,必须设置为0。

IP中涉及的接口:

  • AXI-MM接口,用于高性能、大带宽的数据传输
  • AXI4-Stream 接口适用于低延迟数据流传输
  • AXI Lite Master 接口,是简化版的 AXI 接口,用于较少数据量的通信,一般多用于配置外设寄存器等轻量级的数据传输场景。
  • DMA bypass就是普通的PCIE传输。一般会高于pcie to axi lite如果在DMA的长度比较小的情况下和DMA差不多效率但是如果是长度较大一般是DMA性能更好一点。PCIe DMA bypass占用的是另外一个BAR,一般是host直接发起操作,和DMA比比较消耗host资源,如果这个不是问题就可以用。

主机能够通过下面两个接口直接访问用户逻辑:

1)AXI4-Lite Master 配置接口:此端口是固定的 32 位端口,用于对用户配置和状态寄存器进行非性能关键的访问。

2)AXI Memory Mapped Master CQ 旁路( Bypass) 端口:此端口的宽度与 DMA 通道数据路径相同,旨在用于点对点传输等应用程序中可能需要的对用户内存的高带宽访问。

用户逻辑能够通过 AXI4-Lite Slave 配置接口访问 XDMA 内部配置和状态寄存器。在此接口上掌握的请求不会转发到 PCI Express。

二、XDMA接口说明

DMA/Bridge Subsystem for PCI Express (PCIe)(XDMA)

端口名称

类型

说明

sys_clk

输入

来自Bank上的差分时钟,转成单端之后,经过BUFG传入IP核内

sys_rst_n

输入

主机提供的冷复位,通过原理图查看(冷复位、温复位、热复位)

pcie_cfg_mgmt

输入

PCIe配置管理接口,如访问配置空间地址、写入读取指定地址数据和其他操作(GT收发器通道?)

usr_irq_req

输入

用户定义的中断请求信号(给PC机发送一些中断标志信号,这个不会中断CPU)生成中断

M_AXI

输出

AXI总线的主机信号(AXI访问内存接口高速)

M_AXI_ILTE

输出

pcie_mgt

输出

指的是与PCIe的物理层管理相关的组件和功能,如MDIO接口或与时钟和数据恢复等物理层功能相关的管理任务

usr_lnk_up

输出

表示PCIe链路的连接状态,为高PCIe设备的物理连接已就绪并能够传输数据

axi_aclk

输出

共同的时钟源,用于同步所有AXI通道(读、写和控制通道)上的数据传输和信号处理。应驱动所有对应的 AXI Interconnect aclk 信号。衍生时钟。

axi_aresetn

输出

usr_irq_ack

输出

用户中断应答。表示PCIe上已发送中断

msi_enable

输出

是否启用MSI

msi_vector_width

输出

表示MSI字段的大小

三、IP详细配置

第一页速率与接口选择配置

PCIe的设置速率与用户逻辑侧的AXI速率是一致的!

PCIe侧的速率:8lane*5GT/s=40GTbit/s

逻辑侧的AXI速率:128bit*250M=3200Mbit/s*(10B/8B)=40GTbit/s

Interface width 是指AXI的接口位宽,Recommended Frequency 和 Optional Frequency 可能是指最大的频率,在实际配置中我遇到一些没有按照下面的表格配置。


第二页 PCIE ID配置

芯片 ID 参数取决于:

  • 器件系列: 9 表示 UltraScale+, 8 表示 UltraScale, 7 表示 7 系列器件
  • EP 或 RP 模式
  • 链路宽度: 1 表示 x1, 2 表示 x2, 4 表示 x4, 8 表示 x8, F 表示 x16
  • 链路速度: 1 表示 Gen1, 2 表示 Gen2, 3 表示 Gen3, 4 表示 Gen4

第三页 基地址寄存器配置

  1. PC的内存域地址与PCIe域地址的映射关系:PCIe to AXI Translation这个地址要与Address Editor中AXI_Lite设置的地址大小一致。       

         PCIe to AXI Translation:PCIe 到 AXI 的转换。主机一侧 BAR 地址为 0, 用户逻辑侧 AXI LIte的地址为 0x40000000,则主机访问AXI LIte用户逻辑时, XDMA 将根据该 设置将主机侧 BAR地址0转换到AXI LIte总线地址 0x40000000。对与该值的设置有两种方式,一种是手动指定,然后修改后面 AXI LIte总线的偏移地址,另一种是先确定 AXI LIte总线的偏移地址,然后根据偏移地址设置该值。例如修改地址映射AXI LIte总线的偏移地址为 0x40000000,所以设置此值为 0x40000000。

  1. 旁路DMA,慎用。即可以用来访问用户逻辑,比如配置寄存器的值;也可以用来访问FPGA内存(即连接Xilinx MIG IP读写DDR),但是是非DMA方式访问; 用来实现PCIE 直通用户逻辑访问,可用于低延迟数据传输。
  2. 关于 Prefetchable: 传统上,可预取性意味着预先将内存取出到一个小缓冲区中,以便读取操作变得更快。例如,如果你有两个 PCIe 总线通过网桥连接,如果主总线中的主机必须访问次要总线中的内存,那么网桥将从内存中获取数据并将其存储在网桥缓冲区中。然后主机可以定期访问它,它也会快得多。然而,内存必须是可预取的。如果内存是不可预取的,一旦数据被加载到桥接器的缓冲区,数据将从内存中丢失。如果主机不能从网桥收集数据,那么数据就永远丢失了。如果内存是可预取的,就没有数据丢失的风险。

第四页 中断配置

  1. 中断向量:
  2. MSI 中断和 MSI-X中断只能选择一个,否则会报错,如果选择了 MSI 中断,则可以选择 Legacy中断,如果选择了MSI-X中断,那么MSI必须取消选择,同时Legacy也必须选择None。此 IP 对于7系列设置有这么个问题,如果使用Ultrascale 系列,则可以全部选择。
  • 对PCIE来说只有三种中断:MSI-X、MSI、Legacy。而user interruput是逻辑侧的控制中断口。
  • 中断优先级为:MSI-X>MSI>Legacy
  • 在申请中断时req需要一直保持为高,直到响应ack来了后,才能拉低,然后进行下一次申请;
  • 由于逻辑侧的中断与主机侧的中断是通过优先级来对应的,因此同一时刻只有一种中断。

第五页 DMA选项卡配置

DMA通道数用来区别不同的数据来源和类型,比如光纤数据,ADC数据等;

多通道时在AXIStream模式下影响很明显,在AXI Stream模式下选择多通道,可以连接不同的数据源。在AXI Memory Mapped模式下影响不大。

第六页 共享时钟配置

一个MGT-BANK的参加时钟可以用于相邻的3个MGT-BANK上。那么我们PCIe的输入参考时钟也可以共享,但我们此处没有共享的需求,因此在最后一页中我们没有设置共享时钟。

其他

  1. XDMA如何通过 PCIE 把数据放入电脑内存,简单来说,
  • 我们先向操作系统申请一片电脑内存,得到这个内存的实地址
  • 然后我们把这个实地址和内存大小配置到XDMA的寄存器中
  • 然后写XDMA寄存器启动DMA
  • XDMA就开始准备数据,按章PCIe的数据包格式打包【数据+目的内存的地址】
  • CPU收到包后,会将数据包的数据放到对应地址上,然后发送一个ack包给XDMA
  • 然后XDMA开始准备下一个数据包,直到传输结束
  • 发送一个IRQ告诉CPU DMA传输完成。
  1. PCIe四种复位方式:冷、暖、热、功能层复位

[转载]PCIe扫盲——复位机制介绍(Fundamental & Hot) - 知乎 (zhihu.com)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/874934
推荐阅读
相关标签
  

闽ICP备14008679号