首页 > 其他分享 >IP核:XDMA学习

IP核:XDMA学习

时间:2024-07-06 12:52:13浏览次数:16  
标签:DMA BAR IP 学习 PCIe 地址 MSI AXI XDMA

知识:

XDMA效率没有RIFFA高,最高似乎只支持1288位宽;

输出的用户时钟是250MHZ;

IP核配置:

参考:

https://docs.amd.com/r/zh-CN/pg195-pcie-dma/

具体:

 

重要:

PCIe:BARs标签页
该标签页主要用于配置 BAR,所谓的使能和配置各接口 interface,其实质是配置不同的 BAR,首先介绍下什么是 BAR。 BAR 是 Base Address Register 的缩写,译为基址寄存器。 通过将读取或写入请求映射到基址寄存器( BAR),可以从主机访问 XDMA 内部的配置和状态寄存器以及用户逻辑中的配置和状态寄存器。 XDMA 根据 BAR 命中,将请求路由到适当的位置。 比如,对于 PCIe to AXI-Lite Master (BAR0)地址映射, 命中 PCIe 到 AXI4-Lite Master 的事务将路由到 AXI4-Lite 内存映射用户接口。该接口支持 32 位地址空间和 32 位读取和写入请求。 PCIe to AXI-Lite Master (BAR0)地址映射可由用户逻辑定义。
BAR分2种大小:
32位BAR:地址空间最小可达128字节或者最大可达2千兆字节(GB)。用于内存或I/O。
64位BAR:地址空间最小可达128字节或者最大可达8艾字节(EB)。仅用于内存。
BAR 也可分为两种类型(Type)——I/O 和内存:
I/O: I/O BAR 只能采用 32 位;“可预取 (Prefetchable)”选项不适用于 I/O BAR。仅限针对传统 PCIExpress 端点才能启用 I/O BAR。
内存(Memory):内存BAR可采用64位或32位,并且可预取。
与 BAR 寄存器相关的选项含义:
Size(大小):可用大小范围取决于所选 PCIe 器件/端口类型和 BAR 类型;
Value(值):基于当前选择分配给 BAR 的值;
64bit Enable:是否使用 64 位BAR;
Prefetchable(可预取):识别内存空间预取功能。
每个 BAR 空间可以单独选择 64bit Enable 选项。每个 64 位 BAR 空间都可以选择是否预取。

AXI4‑Lite 是使用BRAM实现的用户逻辑寄存器;

BAR 的选择是可配置的。默认情况下,DMA 位于 BAR 0(64 位),AXI4‑Lite 主接口则位于 BAR 2(64 位)。这些选择可根据用户需求而变;

PCIe to AXI Lite Master Interface:

选择是否启用 AXI-Lite Master Interface 接口;该接口相当于显卡的用户接口, 主机侧可以通过该接口控制显卡的风扇转速、 LED 开关和显示效果等功能,所以当我们需要使用PCIe 接口控制 FPGA 侧的用户逻辑如控制 led 灯等则需要启用该接口。

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

此外, PCIe to AXI Translation 同样也是 AXI LIte总线的基地址,当 AXI LIte总线连接多个 AXI IP 核时,会有多个偏移地址,上位机访问其他 IP 核时的偏移地址是以 PCIe to AXI Translation 的值为基址 0 进行参考的,比如, AXI LIte总线连接的另一个 AXI IP 的偏移地址为 0x40010000,上位机访问该 IP 核的偏移地址就是该 IP 核的偏移地址 0x40010000 - PCIe to AXI Translation 的值 0x40000000=0x10000。 因此当 AXI LIte总线连接多个 AXI IP 核时,需确保 PCIe to AXI Translation 的值小于等于这些 AXI IP 核偏移地址的最小值

参考:

https://blog.csdn.net/Njustxiaobai/article/details/132874083

https://blog.csdn.net/kunkliu/article/details/108812595

PCIE to AXI Lite Master Interface:不勾选 , 我们不使用这个接口来访问用户逻辑,如果有人看过《PCIE_xdma教程_LINUX.pdf》这个pdf文档的话,
应该知道这个文档里讲的是使用这个接口来进行访问用户逻辑,而不使用DMA Bypass 接口,我刚开始也是参照这个文档使用这个接口,但是后面在使用的时候发现了问题,
这个接口的数据输出是经过XDMA内部过滤的,
也就是说这个接口出来的地址并不是所有的都能给用户使用,
有部分地址是用来对XDMA的寄存器配置使用的,
容易造成用户地址和配置地址混合,
如果用户地址只有几个十几个还好,要是有几十上百个的话,这个接口并不实用。

PCIe to DMA Interface: PCIe 至 DMA 接口,该接口默认一直开启,prefetchable和nonprefetchable(可预取和不可预取)。

PCIe to DMA Bypass Interface: 选择是否启用 PCIe 至 DMA 旁路接口。 DMA Bypass 就是普通的 PCIe传输, 不用 DMA 逻辑, 而是直接通过 PCIe 进行通信, 一般传输效率会高于 PCIe to AXI Lite。

Number of User Interrupt Request:用户中断请求数,最多可以选择 16 个用户中断请求;
Legacy Interrupt Settings:可以选择传统中断之一:INTA,INTB,INTC 或 INTD;
MSI Capabilities:默认情况下,启用 MSI 功能,并且启用 1 个向量,最多可以选择 32 个向量。通常,Linux 仅将 1 个向量用于 MSI,可以禁用此选项;
MSI-X Capabilities:使能 MSI-X 功能;
Finite Completion Credits(Advanced 配置模式下有):在支持有限完成信用的系统上,可以启用此选项以获得更好的性能;
Extended Tag Field:扩展标签字段,默认情况下,使用 6 位完成标签。对于 UltraScale 和 Virtex-7 器件,
扩展标签选项提供了 64 个标签。对于 UltraScale +器件,扩展标签选项提供 256 个标签。如果未选择扩展标签选项,则 DMA 将 32 个标签用于所有设备
Configuration Management Interface:是否使用 PCIe 配置管理接口;
关于 MSI-X 中断:用户可以尝试使用 MSI-X 中断,而不是 MSI 或传统中断。使用 MSI-X 中断,数据
速率要优于使用 MSI 或基于传统中断的设计。
中断向量:
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来了后,才能拉低,然后进行下一次申请;
由于逻辑侧的中断与主机侧的中断是通过优先级来对应的,因此同一时刻只有一种中断。

 

Number of Read Channels:主机到 PCIe 卡(H2C)的 DMA 读通道数,对于 7 系列 Gen2 IP,最多两个(通道数越多,同等情况下传输速率越快);
Number of Write Channels:PCIe 卡到主机(C2H)的 DMA 写通道数,对于 7 系列 Gen2 IP,最多两个(通道数越多,同等情况下传输速率越快);
Number of Request IDs for Read channel:读通道的请求 ID 数,即每个通道的最大未完成请求数,可用的选择是从 2 到 64;
Number of Request IDs for Write channel:写通道的请求 ID 数,即每个通道的最大未完成请求数,可用的选择是从 2 到 32;
Descriptor Bypass for Read (H2C):适用于所有选定的读通道。每个二进制数字对应一个通道。LSB 对应于通道 0。值为 1 的位表示相应的通道启用了描述符旁路;
Descriptor Bypass for Write (C2H):适用于所有选定的写通道。每个二进制数字对应一个通道。LSB 对应于通道 0。值为 1 的位表示相应的通道启用了描述符旁路;
AXI ID Width:默认值为 4 位宽,也可以选择 2 位宽;
DMA Status port:DMA 状态端口可用于所有通道。

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

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

 

 

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

 

标签:DMA,BAR,IP,学习,PCIe,地址,MSI,AXI,XDMA
From: https://www.cnblogs.com/VerweileDoch/p/18283974

相关文章

  • pip换源,超详细
    第一部分:了解 pip 换源的意义和背景1.1什么是 pip?pip 是Python的包管理工具,用于安装和管理Python包。它可以从Python包索引(PythonPackageIndex,简称PyPI)或其他源安装包。1.2为什么需要换源?pip 默认使用PyPI作为包的来源,但由于网络延迟、服务器负载、地区......
  • flex布局学习笔记
    教学视频来自25分钟彻底弄懂CSSFlex基础布局/CSSFlex入门教程_哔哩哔哩_bilibili目录一、前置代码二、flex元素的自动宽度​编辑三、flex元素的增大逻辑四、flex元素的缩小逻辑五、flex容器的交叉轴对齐六、flex元素的换行七、flex元素直接的多轴换行八、补充......
  • Uipath学习(一)
    Uipath常用程序包总结:(1)正则表达式依赖程序包:System.Text.RegularExpressions用法:这个语句的作用是判断"溢达集团"这一串字符是否为纯中文:Regex.IsMatch("溢达集团","[1]{0,}$").ToString以下语句的作用是去除字符串中的非中文的字符,保留纯中文部分:Regex.Replace("Abc+_!@......
  • 基于深度学习的软件漏洞检测模型在现实数据集上的表现
        软件漏洞对日常软件系统的影响令人担忧。尽管已经提出了基于深度学习模型的漏洞检测方法,但这些模型的可靠性仍然是一个重大问题。先前的评估报告这些模型具有高达99%的召回率/F1分数,但研究发现,这些模型在实际应用场景下的表现并不佳,特别是在评估整个代码库而不仅仅......
  • 自然语言处理学习--3
    对自然语言处理领域相关文献进行梳理和总结,对学习的文献进行梳理和学习记录。希望和感兴趣的小伙伴们一起学习。欢迎大家在评论区进行学习交流!论文:《ChineseBERT:ChinesePretrainingEnhancedbyGlyphandPinyinInformation》下面将根据以下五部分内容进行论述1.解决了......
  • 《IT 领域新生暑期学习之旅》
    IT专业入门,高考假期预习指南七月来临,各省高考分数已揭榜完成。而高考的完结并不意味着学习的结束,而是新旅程的开始。对于有志于踏入IT领域的高考少年们,这个假期是开启探索IT世界的绝佳时机。作为该领域的前行者和经验前辈,你是否愿意为准新生们提供一份全面的学习路线图呢?快来......
  • 【Python】原创·基础·学习笔记1
         一、字面量二、变量三、注释四、数据类型1.数据类型的分类2.数据类型的转换3.数据类型查询type()语句五、标识符六、运算符七、字符串的定义  1.字符串的三种定义方式  2.引号的嵌套使用  3.使用转义字符八、字符串拼接九、字符......
  • 字符串函数库的经典使用学习
    <?php//1.单引号定义字符串//2.双引号定义字符串//3.定界符定义字符串//1.单引号定义字符串//echo'thisis'my'mother';echo'thisis\'my\'mother<br>';//单引号不能解析转义符\n换行\t缩进echo'this\nisasimple\tstr......
  • 【跟我学K8S】45天入门到熟练详细学习计划
    目录一、什么是K8S核心功能架构组件使用场景二、入门到熟练的学习计划第一周:K8s基础和概念第二周:核心对象和网络第三周:进阶使用和管理 第四周:CI/CD集成和监控第五周:实战模拟和案例分析第六周:综合练习和准备面试一、什么是K8SKubernetes(常简称为K8s)是一个开源的......
  • 深度学习项目,代码改进,模型优化
    深度学习项目代码改进 预测模型模型优化,增加模块,python,预测,微调,融合,强化学习,深度学习,机器学习程序,环境调试,代码调通,模型优化,模型修改,时间序列,机器学习数据处理等开发工程,项目主攻:Pytorch,Tensorflow,Yolo,Unet,DNN,CNN,GAN,Transformer,matlab,训练模型,优化,price增加模......