当前位置: 首页 > article >正文

XDMA原理

目录

  • 1. BAR Space Map
  • 2. PCIe to AXI Lite Master
    • 2.1. BAR Address to AXI Address
  • 3. PCIe to DMA Bypass
  • 4. AXI4 Memory Mapped
    • 4.1. Register Space
  • 5. AXI Lite Slave Configuration Interface
  • 6. MSI/MSI-X Interrupt
    • 6.1. Interrupts Configuration
    • 6.2. IRQ Module
  • 7. IP Example Design


介绍XDMA IP核的功能及原理。

根据pg195,XDMA IP 具备PCIe to AXI Bridge和PCIe to DMA两种功能,PCIe to AXI Bridge只存在于UltraScale+器件,不支持7系列器件。此处只介绍PCIe to DMA功能。

pg195 《DMA/Bridge Subsystem for PCI Express v4.1Product Guide Vivado Design Suite》

根据XDMA IP设置,有如下几种接口,下面依次介绍这几种接口的功能

在这里插入图片描述

XDMA内部构成如下图所示

在这里插入图片描述

PCIe协议详解见高速外设互连接口(Peripheral Component Interconnect express, PCIe)

1. BAR Space Map

先看BAR空间映射,XDMA IP包含三大功能:PCIe to AXI Lite Master、DMA、PCIe to DMA Bypass,分别为这三个功能开辟BAR空间,映射如下:

在这里插入图片描述

其中PCIe to AXI Lite Master和PCIe to DMA Bypass可以看作是PCIe到两种接口的桥,是直接将PCIe总线域地址转换到AXI总线域地址,因此这两个功能的BAR空间大小取决于FPGA侧寻址空间,可由用户指定。

DMA功能是通过XDMA内部寄存器控制的,所以DMA功能的BAR空间用于寻址XDMA各种寄存器,所以大小是固定256KB。

在这里插入图片描述

2. PCIe to AXI Lite Master

这个比较简单,使用AXI Lite接口用于主机访问用户侧的各种寄存器、存储器。XDMA为该接口开启一个BAR空间,通过将PCIe总线域地址映射到FPGA处AXI总线域地址,实现寄存器读写。该接口*addr接口位宽为固定32bit.

IP设置该接口如下,需要指定主机为该BAR空间分配的内存空间大小,以及PCIe到AXI地址转换值。

其中AXI 总线域地址=PCIe总线域地址 偏移+PCIe to AXI Transalation
在这里插入图片描述

手把手教你学会 Xilinx PCIE/XDMA 读写DDR系列(二) ——XDMA详细配置步骤
33.XDMA功能详解2-XDMA概述、功能框图、应用场景

下面介绍XDMA内部是如何通过TLP对用户侧进行访问的。

2.1. BAR Address to AXI Address

以下图FPGA的Block Design为例,XDMA IP 通过AXI SmartConnect连接MIG和BRAM

在这里插入图片描述

假设XDMA 的BAR0映射为M_AXI_LITE接口,且满足:PCIe to AXI Transalation==0x4000_0000

假设主机侧为BAR0分配的PCIe域内存空间为0x1000_0000-0x3000_0000(512MB)。

其中MIG为64M×32bit,寻址空间为256MB,主机侧的PCIe域地址空间为0x1000_0000-0x1FFF_FFFF,在FPGA侧的AXI总线域地址设置为0x4000_0000-0x4FFF_FFFF。

其中Block RAM为16K×32bit,寻址空间为64KB,主机侧的PCIe域地址空间为0x2000_0000-0x2000_FFFF,在FPGA侧设置的AXI总线域地址为0x5000_0000-0x5000_FFFF

AXI 总线域地址就是Vivado里Address Editor标签中命名的地址

如果主机要读取Block RAM中0x10的数据步骤如下:

  1. 先发送Length为0x1、Address为(0x2000_0000+0x40)的MRd TLP至pcie_mgt接口
  2. XDMA检测到TLP中的Address字段命中BAR0后,就将BAR0转化为AXI总线域地址,通过M_AXI_LITE接口发送读请求,其m_axi_araddr[31:0]=(0x4000_0000+(0x2000_0000+0x40-0x1000_0000))=(0x5000_0000+0x40),m_axi_rdata[31:0]返回数据
  3. 之后AXI SmartConnect再将AXI总线域地址转化为M01_AXI的地址,即BRAM Controller侧地址,即M01_AXI_araddr[15:0]=0x40、M01_AXI_arlen[7:0] = 8’d3、M01_AXI_arsize[2:0] =3’d2。
  4. AXI BRAM Controller将BRAM Controller侧地址转化为BRAM的raddr[13:0] = 0x10

3. PCIe to DMA Bypass

DMA旁路接口,并不经过DMA引擎,简单来说这个接口就是将主机发来的MRd/MWr等 TLP转换到AXI送到用户侧,与 PCIe to AXI Lite Master功能类似。主要用于高带宽情景。

在这里插入图片描述

4. AXI4 Memory Mapped

AXI4 Memory Mapped接口是XDMA实现SG DMA的接口。主机使用MWr TLP通过XDMA的BAR空间对相关寄存器进行配置,实现DMA控制。

其关键过程在于,启动DMA后,XDMA使用MRd TLP从主存读取descriptors和数据,再通过M_AXI(也可以是H2C Stream、C2H Stream)访问用户侧,当全部数据DMA完毕后,向主机发送MSI/MSI-X中断。

XDMA - AXI4 Memory Mapped

4.1. Register Space

DMA过程涉及多个寄存器,XDMA寄存器空间位于DMA 所在的BAR,XDMA含有如下寄存器组

在这里插入图片描述

而对寄存器的寻找,BAR空间偏移地址需要满足如下PCIe to DMA Address Format格式。

在这里插入图片描述

例如DMA BAR的基地址为32’h0004_0000,要访问C2H Channel 2第3个寄存器。那么,用户侧AXI Lite Slave 接口中s_axil_a*addr[31:0]应为32’h0000_1208,主机发来的MRd TLP中Address[31:0]应为32’h0004_0000+32’h0000_1208=32’h0004_1208

5. AXI Lite Slave Configuration Interface

FPGA可以对XDMA内部寄存器通过该接口访问。

其s_axil_a*addr[31:0]使用PCIe to DMA address Format格式访问

在这里插入图片描述
在这里插入图片描述

6. MSI/MSI-X Interrupt

MSI/MSI-X是PCIe协议的两种常用中断机制,详细介绍可见

高速外设互连接口(Peripheral Component Interconnect express, PCIe)- MSI/MSI-X Capability Structures

下面介绍XDMA实现中断的方式

43.XDMA寄存器详解7-MSI-X Vector Table and PBA寄存器组剖析及MSI-X中断详解

6.1. Interrupts Configuration

在IP GUI界面中,可以设置User Interrupts个数,可以将电平信号输入XDMA手动产生中断,并可对Legacy、MSI、MSI-X三种中断进行配置。最大可配置16个用户中断和32个MSI中断向量

在这里插入图片描述

主机可以通过MRd TLP配置中断,用户可以通过AXI Lite Slave接口配置中断。相关寄存器如下

IRQ Block寄存器组0x2000-0x20A4

在这里插入图片描述

MSI/MSI-X Table and PBA 0x8000-0x8FE0

在这里插入图片描述

6.2. IRQ Module

IRQ模块接收若干个用户中断请求,以及每个H2C/C2H Channel的DMA中断请求,通过PCIe协议向主机发出中断。

对于DMA中断而言,每次结束DMA过程后,会自动产生中断,如第4节表述,此处不多赘述。

对于用户中断而言,XDMA有输入接口usr_irq_req[n:0]用于接收用户中断,以及输出接口usr_irq_ack[n:0]表示中断是否被主机处理。这两个信号时序是:usr_irq_req拉高后必须一直保持为高,直到usr_irq_ack拉高。

在这里插入图片描述

如下图所示MSI-X的情形

在这里插入图片描述

7. IP Example Design

可以对XDMA右键打开官方例程进行仿真。

在这里插入图片描述
官方simulation中将XDMA作为EP,只有一个H2C通道和一个C2H通道,通过RP进行控制。架构如下

在这里插入图片描述

Xilinx XDMA 例程代码分析与仿真结果


http://www.kler.cn/a/281669.html

相关文章:

  • beforeEach中addRoutes后使用next()无法访问,路由未生效,刷新页面白屏,使用next({ ...to, replace: true })
  • 书生大模型实战营(第3期)进阶岛第二关--Lagent 自定义你的 Agent 智能体
  • 笔记小结:《利用python进行数据分析》之使用pandas和seaborn绘图
  • AList嵌入动态验证码实现动态校验
  • Apache Flink内存模型
  • 算法:双指针
  • CMakeLists.txt文件编写详解
  • CF E. Best Pair
  • vulhub xxe靶机
  • 安全可靠的国产自研数据库PolarDB V2.0,让数据库开发像“搭积木”一样简单
  • 量化交易策略:期货跨期套利之油粕比金银比策略python代码实现
  • 在Windows上安装MySQL的步骤
  • Linux查看jvm相关参数以及设置调优参数
  • 终极解决 docker 拉取镜像失败的问题,其他类似场景也适用
  • 动物消消乐:Scratch消除类游戏作品
  • C语言迷宫制造
  • python-FastApi框架
  • 文件上传面板中限制需要的文件格式,并且隐藏“所有文件”选项
  • Linux 系统性能调优 1
  • QT C++ 判断字符串是否是一个数字