首页 > 其他分享 >AXI DMA (四)

AXI DMA (四)

时间:2024-11-15 18:17:33浏览次数:3  
标签:DMA 传输 描述符 MM2S AXI 数据包

免责声明:本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济损失。

读者在使用本文信息时,应自行验证其准确性和适用性,并对其使用结果负责。本文内容不构成专业技术咨询或建议,具体的技术实现和应用应根据实际情况和需要进行详细分析和验证。

本文所涉及的任何商标、版权或其他知识产权均属于其各自的所有者。若本文中引用了第三方的资料或信息,引用仅为学术交流目的,不构成对第三方内容的认可或保证。

若有任何疑问或需进一步信息,请联系本文作者或相关专业人士。


前言

本章继续介绍AXI DMA的Scatter/Gather Mode的使用。


一、Typical System Interconnect

1. AXI DMA 核心的连接

  • AXI DMA 核心 通过 AXI Interconnect 连接到用户系统的其他模块。这意味着 AXI DMA 是通过 AXI 总线与系统中的其他硬件组件(如处理器、内存等)进行通信的。
  • 典型的 MicroBlaze™ 处理器配置:该配置展示了一个典型的嵌入式处理器(MicroBlaze)与 AXI DMA 核心如何连接。MicroBlaze 是 Xilinx 的一种软处理器,通常用于 FPGA 中的系统中。

2. AXI DMA 与处理器的通信

  • AXI4-Lite 接口:MicroBlaze 通过 AXI4-Lite 接口访问 AXI DMA 核心。AXI4-Lite 是一种简化版的 AXI 协议,用于低带宽、简单控制的应用。在这里,AXI4-Lite 接口主要用于控制和配置 DMA 操作(如启动 DMA、设置传输长度等)。

3. Scatter/Gather 引擎

  • Scatter/Gather 引擎 是一个集成的功能模块,负责从系统内存中获取 Buffer Descriptors(缓冲区描述符)。这些描述符定义了数据传输的目标地址、传输长度等信息。
    • Buffer Descriptors 是一组数据结构,用于描述 DMA 传输的块,指示如何进行数据传输。
    • 引擎根据这些描述符来协调数据从 AXI 接口传输到 DDR 内存或从 DDR 内存传输到其他外设。

4. 主数据传输

  • 引擎将缓冲区描述符传递给 DMA 核心后,DMA 核心执行 主数据传输,即将数据从 AXI IP(如 Ethernet、存储器等)传输到 DDR(动态随机访问存储器),或者从 DDR 中读取数据并传输到其他硬件。

5. 可选的控制和状态流

  • 控制和状态流 是可选的功能模块,用于与与数据传输相关的其他信息(例如校验和卸载控制/状态)进行通信。
    • 这些流提供了数据包相关的信息,通常在 Ethernet 等协议栈中使用。例如,校验和卸载(checksum offload)可以通过控制流来指示是否进行校验和计算。
    • 这些控制和状态流允许 DMA 在与 IP(如 Ethernet)进行数据传输时,也能传递和接收一些元数据或控制信息。

6. 中断系统

  • 双中断输出:AXI DMA 核心具有两个中断输出,这些中断可以用来通知系统不同的事件,如数据传输完成、传输错误等。
    • 这些中断信号会路由到 系统中断控制器,从而触发相应的中断处理程序进行响应。中断可以用来实现高效的事件驱动机制,不必不断轮询 DMA 状态寄存器。

二、Scatter/Gather Mode

1. 描述符链(Descriptor Chain)

  • 描述符链 是 AXI DMA 操作所需的内存数据结构,它包含了一系列的 DMA 操作。每个描述符包含一个指向下一个描述符的指针,形成一个链式结构。
  • 描述符链中的 最后一个描述符 会指向链中的 第一个描述符,从而形成一个环形结构,确保 DMA 能够持续进行数据传输。
  • 描述符的每个条目(descriptor)可能包含关于数据块传输的关键信息,如数据源地址、目标地址、传输长度、控制信息等。

2. Scatter Gather 操作

  • Scatter Gather 操作允许一个数据包由多个描述符来描述。例如,数据包的头部(header)可以存储在内存中的一个位置,而有效负载(payload)可以存储在另一个位置。这使得软件能够灵活地管理内存中分散的数据块,提高吞吐量。
  • 这种方式的一个典型用法是,存储数据包的不同部分(如头部和负载)时,通过不同的描述符分别访问不同的内存位置。

3. TXSOF 和 TXEOF

  • TXSOF(Start of Frame)和 TXEOF(End of Frame)是描述符链中用于标识数据包开始和结束的标志位。
    • 当 DMA 从描述符链中获取一个描述符,并且该描述符的 TXSOF 位被设置时,DMA 就会触发一个数据包的开始。
    • 接下来,DMA 会依次处理链中的下一个描述符,直到找到一个 TXEOF 位被设置的描述符,此时数据包传输完成。

4. RXSOF 和 RXEOF(接收通道)

  • S2MM(接收通道) 中,数据包的接收过程也通过描述符链进行标识。
    • 当数据包开始接收时,AXI DMA 会将描述符的 RXSOF 位设置为 1,表示该描述符关联的缓冲区包含数据包的开始部分。
    • 如果接收到的数据包比当前描述符所指定的字节数更多,DMA 会继续使用下一个描述符中的缓冲区来存储接收数据包的其余部分,直到整个数据包接收完毕。
    • 当接收到的数据包的 最后一部分 被存储完后,DMA 会在处理的描述符中设置 RXEOF=1,这表示该描述符关联的缓冲区包含数据包的结束部分。

5. 字节传输统计

  • 每个描述符的状态字段会记录实际传输的字节数。软件可以通过遍历从 RXSOFRXEOF 的描述符链来计算整个接收包的总字节数。
    • 这意味着软件需要根据从 RXSOF 开始的描述符链,逐个检查描述符中的字节数,直到到达 RXEOF 描述符为止,从而得出整个数据包的总传输字节数。

6. 性能优化

  • Scatter Gather 操作通过 连续获取下一个描述符存储剩余数据 的方式来优化 DMA 性能。DMA 通过这种机制高效地处理多个数据块的传输,减少了中间缓冲和延迟,提升了吞吐量。

7. 操作启动

  • Scatter Gather 操作的启动需要配置 控制寄存器描述符指针,确保 DMA 可以从正确的地址和长度开始处理数据。

三、A DMA operation for the MM2S channel is set up and started by using the following sequence:

  • 启动描述符:

    • 当前描述符寄存器写入起始描述符的指针。
    • 如果AXI DMA的地址空间大于32位(即支持大于4GB的地址空间),还需要编程当前描述符的高32位地址。
  • 启动MM2S通道:

    • 通过设置MM2S_DMACR.RS = 1来启动MM2S(Memory to Stream)通道。
    • 此时Halted bitDMASR.Halted)应解除,表示MM2S通道已开始运行。
  • 启用中断(可选):

    • 如果需要中断处理,设置MM2S_DMACR.IOC_IrqEnMM2S_DMACR.Err_IrqEn为1,启用中断。
    • IOC_IrqEn为完成中断,Err_IrqEn为错误中断。
  • 设置尾描述符:

    • 尾描述符寄存器写入有效指针。
    • 如果AXI DMA的地址空间大于32位,同样需要编程尾描述符的高32位。
  • 启动DMA:

    • 写入尾描述符寄存器后,DMA开始从内存中获取描述符。
    • 如果配置了多通道,描述符的获取在S2MM(Stream to Memory)通道接收到数据包后开始。
  • 数据处理:

    • 获取到描述符后,DMA将从内存中读取数据,并将数据输出到MM2S流通道。

四、示例仿真

1.打开Scatter Gather模式并打开示例工程

2.通过AXI-LITE进行配置

往0x08寄存器中写入0x00向当前描述符寄存器写入起始描述符指针;

往0x00寄存器中写入0x00027001启动MM2S通道,启用中断(传输2次后产生中断);

往0x10寄存器中写入0x0040向尾描述符寄存器写入有效指针。

3.AXI SG接口获取描述符信息(1)

8个基本描述符,0x00000040该值提供指向描述符链中下一个描述符的指针;

缓冲地址为0x00000000;

0x0c000080传输128byte,这个描述符的TXSOF=1TXEOF=1都可以同时设置,表示该描述符既是数据包的开始也是结束.

3.AXI SG接口获取描述符信息(2)

0x00000080该值提供指向描述符链中下一个描述符的指针;

 BUFFER_ADDRESS:0x00000080该值提供了指向要从系统内存传输到流的数据缓冲区

0x0c000080传输128byte

4.从AXI MM2S接口取数据

从缓冲区域中取数据,INRC模式,突发长度被限制到15+1,每次传输32bit,因此128byte被拆分成2次突发。

1.

2.

5.AXIS MM2S输出AXIS数据流

6.传输完成后产生中断


标签:DMA,传输,描述符,MM2S,AXI,数据包
From: https://blog.csdn.net/qq_52538756/article/details/143787507

相关文章

  • Axios 拦截器示例(JWT 登录与自动刷新)
    1.安装axios首先,确保你已经安装了axios:npminstallaxios2.设置Axios拦截器importaxiosfrom'axios';//创建一个axios实例constaxiosInstance=axios.create({baseURL:'http://localhost:8000/',//后端API地址timeout:10000,//设置超时时间......
  • [LeetCode] 2064. Minimized Maximum of Products Distributed to Any Store
    Youaregivenanintegernindicatingtherearenspecialtyretailstores.Therearemproducttypesofvaryingamounts,whicharegivenasa0-indexedintegerarrayquantities,wherequantities[i]representsthenumberofproductsoftheithproducttype......
  • el表达式+axios+vue -2024/11/13
    一个好看的界面<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>首页</title></head><body><divid="app"><el-menu:default-active=......
  • VUE 封装axios
    axios官方介绍:https://www.axios-http.cn/docs/intro node.js安装:npminstallaxios封装一个配置文件constinstance=axios.create({baseURL:'https://some-domain.com/api/',timeout:1000,headers:{'X-Custom-Header':'foobar'}});......
  • 了解Axios:初学者看懂这篇博客就够了
    目录1.引言没有Axios时的HTTP请求使用Axios发送HTTP请求2.什么是Axios?3.安装Axios4.发送GET请求5.发送POST请求6.处理请求和响应7.取消请求8.结论1.引言        在现代Web开发中,与服务器进行数据交换是必不可少的。Axios是一个流行的JavaScript......
  • Educational Codeforces Round 144 (Rated for Div. 2) C. Maximum Set
    我们要选出最长的子序列,使得每一个数都是前一个数的倍数。因此自然我们可以想到选择最小值然后每次乘\(2\)。所以有\(l\times2^k\ler\),即\(k=\left\lfloor\log_2\frac{r}{l}\right\rfloor\)。所以最大的集合大小就是\(k+1\)。然后考虑最大的集合中最小值可能不同,我假设......
  • 实现无感刷新Token技术:.Net Web API与axios的完美结合
    这是我之前分享在星球里面的课程,下面整理下,分享下这个无感刷新Token技术方案。我们都知道Token是有设置有效期的,为了安全都不会设置过长的有效期;但设置有效期太短,又会导致经常需要重新登录。这就需要无感刷新Token的方案,来提升用户体验。目前比较常用的方案是:双token机制。1......
  • STM32CubeMX:使用DAC输出正弦波的三种方法(while,定时器中断,DMA)
    1.DAC概念简介:DAC的工作原理是根据数字输入信号的数值,生成相应的模拟输出电压或电流。它通常接收一个二进制数字输入,该数字代表了一个特定的数值范围。DAC通过将这个数字值转换为模拟信号的电压或电流水平来输出。(功能与ADC相反)2.正弦波输出方式1:简单粗暴while循环输出Cub......
  • 一道题把我气笑了:) 力扣.53 最大子数组和 leetcode maximum-subarray
    数组系列力扣数据结构之数组-00-概览力扣.53最大子数组和maximum-subarray力扣.128最长连续系列longest-consecutive-sequence力扣.1两数之和N种解法two-sum力扣.167两数之和IItwo-sum-ii力扣.170两数之和IIItwo-sum-iii力扣.653两数之和IVtwo-sum-IV力......
  • [LeetCode] 3090. Maximum Length Substring With Two Occurrences
    Givenastrings,returnthemaximumlengthofasubstringsuchthatitcontainsatmosttwooccurrencesofeachcharacter.Example1:Input:s="bcbbbcba"Output:4Explanation:Thefollowingsubstringhasalengthof4andcontainsatmosttw......