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.mzph.cn/pingmian/52585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gitlab迁移到新的服务器后点击Integrations报500错误的解决方法

目录 一、问题描述二、解决方法1.方法12.方法2(1)备份 /etc/gitlab/gitlab-secrets.json(2)进入数据库(3)查看 Project ID(4)查找 hook ID 并删除(5)申请访问令牌并执行 api 删除操作一、问题描述 Gitlab迁移到新的服务器后点击Integrations报500错误: 查后台日志…

前后端开发学习路线 囊括Dubbo、Elasticsearch等

以下都是博主本人看过后给出的推荐。 文章目录 前端入门Web开发基础(HTML、CSS、JS)写项目前置(AJAX、Vue等)开始写项目(Vue、Uniapp)重点Future 入门Java后端基础部分(Java、MySQL)…

kubectl陈述式资源管理方式、声明式资源管理

一、命令行: kubectl命令行工具 优点: 90%以上的场景都可以满足 对资源的增,删,查比较方便,对改不是很友好 缺点:命令比较冗长,复杂难记 声明方式:k8s当中的yaml文件实现资源管理----声明式 GUI:图形化工具的管理…

【终端IDPS】开源安全平台Wazuh之Wazuh Server

引言 Wazuh是一个开源的、免费的企业级安全监控解决方案,专注于威胁检测、完整性监控、事件响应和合规性。它由部署在受监控系统的端点安全代理和管理服务器组成,服务器收集并分析代理收集的数据。Wazuh支持多平台,包括Windows、Linux、macOS…

VLM 系列——Mini-Monkey——论文解读

一、概述 1、是什么 Mini-Monkey 论文全称《Mini-Monkey: Multi-Scale Adaptive Cropping for Multimodal Large Language Models》,是一个轻量级MLLM(多模态的视觉-文本模型),基于InternViT、MLP和InternLLM,其实就是…

基于元神操作系统编程写硬盘扇区

1. 背景 本文介绍了“调用元神操作系统API向硬盘扇区写数据”的程序实现及测试结果。 2. 方法 (1)调用元神操作系统API读硬盘扇区 本部分内容已在前面的文章中进行介绍,详细内容请参考“编写程序调用元神操作系统的API”。 (…

STM32F103与ESP8266 WIFI模块的USART中断调试

本文概述了利用STM32F103的HAL库,通过USART中断方式调试ESP8266(ESP-01)WIFI模块的方法。首先介绍了开发环境和ESP-01模块的基本特点与功能,随后展示了如何通过电脑PC的串口助手进行初步调试与验证。最后,重点阐述了如…

SpringBoot-读取配置文件方式

前言 Spring Boot提供了多种灵活的方式来读取配置文件,以适应不同的开发和部署需求,SpringBoot启动的时候,读取配置文件的时候,首先获取的是file:/config/文件下的配置文件,也就是项目下config文件里面的配置文件&…

jmeter 响应乱码

Jmeter在做接口测试的时候的,如果接口响应的内容中有中文,jmeter的响应内容很可能显示乱码,为了规避这种出现乱码的问题,就要对jmeter的响应结果进行编码处理。 打开jmeter进行接口、压力、性能等测试,出现以下乱码问…

等保需要的设备部署vs网络安全域划分原则

等保需要的安全设备和部署 技术要点–等保2级 技术要点–等保3级 安全产品/服务全景图 选型产品说明 安全区域边界配置 资产探测及漏洞检测配置 网络安全域划分原则 网络安全域 定义 网络安全域是一种网络划分方式,将具有相同安全需求、访问控制、相同信任级别、…

【MySQL 14】用户管理

文章目录 🌈 一、用户管理⭐ 1. 用户信息⭐ 2. 创建用户⭐ 3. 修改密码⭐ 4. 删除用户 🌈二、数据库的权限⭐ 1. 权限列表⭐ 2. 查看权限⭐ 3. 授予权限⭐ 4. 回收权限 🌈 一、用户管理 MySQL 也会区分普通用户和超级用户。如果只是访问某一…

【云原生系列之SkyWalking的部署】

1、分布式链路追踪 1.1概念 在较大的web集群和微服务环境中,客户端的一次请求需要经过不同的模块,多个不同中间件,多个不同机器一起相互协作才能处理完成客户端的请求,而在这一系列的请求过程之中,处理流程可能是串行执行,也可能…

【微信小程序】全局数据共享 - MobX

1. 什么是全局数据共享 2. 小程序中的全局数据共享方案 3.Mobx的使用 1.npm init -y(根据实际情况选择) 在小程序项目中,可以通过 npm 的方式引入 MobX 。 如果你还没有在小程序中使用过 npm ,那先在小程序目录中执行命令: npm init -y2. …

19.神经网络 - 线性层及其他层介绍

神经网络 - 线性层及其他层介绍 1.批标准化层–归一化层(不难,自学看官方文档) Normalization Layers torch.nn — PyTorch 1.10 documentation BatchNorm2d — PyTorch 1.10 documentation 对输入采用Batch Normalization,可…

[数据集][目标检测]光伏发电板红外图像鸟粪检测数据集VOC+YOLO格式173张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):173 标注数量(xml文件个数):173 标注数量(txt文件个数):173 标注类别…

sentinel安装

Releases alibaba/Sentinel GitHub java -jar sentinel-dashboard-1.8.8.jar 默认启动端口是8080 修改端口启动 java -jar sentinel-dashboard-1.8.8.jar --server.port8888 localhost:配置的端口 账密都是sentinel

本地部署Xinference实现智能体推理工作流(一)

提示:没有安装Docker的需要先提前安装好Docker 第一篇章 使用AutoDL平台快速部署xinference 备注:若使用AutoDL平台,以下过程使用无卡模型开机即可(省钱) 1. 下载Dify源码 Github下载Dify:https://github.com/langgenius/dify 2. 快速启动…

通过观测云 eBPF Tracing 实现无埋点的全链路追踪

前言 随着微服务架构的普及和系统复杂度的增加,对应用程序的可观测性要求也越来越高。传统的监控方法通常需要在应用程序中添加代码来记录和追踪重要信息,这种方法可能会增加系统的负担,并且在复杂系统中维护难度较大。 eBPF(Ex…

告别PDF格式困扰,2024年PDF转换器推荐

PDF现在已经逐渐成为了文件传输的主流格式了,它有保存文件页面版式的优点,但是这个格式编辑对大部分人来说还是不那么方便,日常我们还是习惯将它们转换成我们常见的 文本格式来操作。今天我分享一下可以实现PDF格式转换的pdf转换器有哪些吧。…

SX_c语言字符串赋值 “multiple definition of .. first defined here”问题_21

字符串赋值问题&#xff1a; #include <stdio.h> #include <string.h>char* my_string_cat(int position, int slot, char* content){char* gnsst NULL;static char retvalue[50];memset(retvalue, \0, sizeof(retvalue));if(position 0){//头部if(slot 0){//卡…