首页 > 其他分享 >SGDMA与普通DMA

SGDMA与普通DMA

时间:2024-05-02 12:22:49浏览次数:22  
标签:SGDMA FPGA DMA IP 描述符 普通 include

DMA(Direct memory access,内存直接存取),属于 Vectored I/O 方式,也是下沉运算的一种实现。

区别

Scatter-gather DMA 与 Block DMA(即普通DMA) 方式不同,
Block DMA: 一次只传输一块物理上连续的数据,完成后中断,主机收到中断后再行下一块物理上连续的数据传输。
Scatter-gather DMA: 使用一个链表描述物理上不连续的存储空间,然后把链表首地址告诉DMA master。DMA master在传输完一块物理连续的数据后,会直接根据链表继续传输下一块物理上连续的数据,直到传输完毕后才发起中断。

很显然,scatter-gather DMA方式比block DMA方式效率高,但需要硬件软件都实现。

下图是某IP厂商的SG-DMA IP
image

Linux应用层 Vectored_I/O 写法(需驱动实现)

应用层的写法,代码来自Vectored_I/O-wikipedia

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <unistd.h>
#include <sys/uio.h>

int main(int argc, char *argv[])
{
	const char buf1[] = "Hello, ";
	const char buf2[] = "Wikipedia ";
	const char buf3[] = "Community!\n";

	struct iovec bufs[] = {
		{ .iov_base = (void *)buf1, .iov_len = strlen(buf1) },
		{ .iov_base = (void *)buf2, .iov_len = strlen(buf2) },
		{ .iov_base = (void *)buf3, .iov_len = strlen(buf3) },
	};

	if (writev(STDOUT_FILENO, bufs, sizeof(bufs) / sizeof(bufs[0])) == -1)
	{
		perror("writev()");
		exit(EXIT_FAILURE);
	}

	return EXIT_SUCCESS;
}

STM32 的 DMA控制器(Block DMA)

RM0090-STM32F4

支持 内存到内存,外设到内存,内存到外设 四种。

框图
image

STM32上的DMA矩阵。
image

内存到外设模式的内部工作图
image

需要配置的参数有:

  • DMA 数据流 / 通道
  • 数据流优先级
  • 源和目标地址
  • 传输模式
  • 传输数据量大小 (仅当 DMA 为流量控制器时)
  • 源 / 目标地址递增或非增
  • 源和目标数据宽度
  • 传输类型
  • FIFO 模式
  • 源 / 目标批量传输数据量大小
  • 双缓冲区模式
  • 流控

AN4031 手册有更多的说明。

Block DMA 描述符

Block DMA 支持传输物理地址连续的内存,只需要告诉DMA控制器三元参数描述符(数据长度,源地址,目的地址)
image

FPGA

FPGA IP 设计和造芯片有一些相同的步骤。我们拿拥有居多开源资源的FPGA资料来看再好不过了。

Xilinx IP 之 AXI CDMA

https://docs.amd.com/r/en-US/pg034-axi-cdma/Overview
image

像赛灵思的IP,控制器支持普通DMA和SGDMA两种,可以非常清晰地看到,SGDMA不同于普通DMA的接口。

该IP对于SGDMA的描述:

The AXI CDMA can optionally include Scatter/Gather (SG) functionality for off-loading CPU management tasks to hardware automation. The Scatter/Gather Engine fetches and updates CDMA control transfer descriptors from system memory through the dedicated AXI4 Scatter Gather Master interface. The SG engine provides internal descriptor queuing, which allows descriptor prefetch and processing in parallel with ongoing CDMA data transfer operations.

可以看到关键字样是off-loading卸载CPU的运算压力。SGDMA引擎提供了内部描述符队列。支持预读取和并行处理。

像在赛灵思的FPGA设计中,SGDMA会比普通DMA多了一个M_AXI_SG总线,用于读取SGDMA的描述符。

Intel IP 之 SG-DMA Controller Core

image

SG-DMA 描述符

我们可以看一下世界两大FPGA巨头的描述符
赛灵思FPGA的寄存器
image

英特尔旗下FPGA的寄存器
https://www.intel.com/content/www/us/en/docs/programmable/683130/24-1/dma-descriptors-06781.html
image

需要DMA控制器四元参数描述符(大小,源地址,目的地址,下一链的地址)

如果您需要设计FPGA程序,可以参考这篇:https://www.cnblogs.com/ruidongwu/p/15046127.html

标签:SGDMA,FPGA,DMA,IP,描述符,普通,include
From: https://www.cnblogs.com/yucloud/p/18170056/SGDMA_DMA

相关文章

  • 表单-确认重置按钮,普通按钮
    表单的确认按钮,和重置按钮:<form> <!--提交按钮,可以用button,也可以用input类型submit--><!--<button>确认</button>--><inputtype="submit"><inputtype="submit"value="批准">......
  • 路由策略(普通路由,默认路由)和策略路由
    转自:https://blog.csdn.net/qingdao666666/article/details/114088829 路由策略和策略路由路由策略是根据一些规则,使用某种策略改变规则中/影响路由发布、接收或路由选择/的参数而改变路由发现的结果,最终改变的是路由表的内容。是在路由发现的时候产生作用。策略路由是尽管......
  • C#接口、抽象类、普通类和继承(子类与父类)都有其特定的用途和场景
    在C#(以及许多其他面向对象的编程语言中),接口、抽象类、普通类和继承(子类与父类)都有其特定的用途和场景。选择使用哪种机制通常取决于你的具体需求和设计目标。不过,关于“能使用接口就不用抽象类,能使用抽象类就不用类,能用父类就不用子类”的说法,这并不完全准确,因为每种机制都有其独......
  • OpenWrt 配置普通用户使用密钥登录
    转自 OpenWrt配置普通用户使用密钥登录 感谢分享 OpenWrt默认使用root账户管理整个系统,并且在WebUI上会自动填充用户名信息,而家里的网络环境比较复杂,主路由会为所有局域网设备分配公网IPv6地址。这样对外很不安全,因此需要对SSH进行配置加固,并且拒绝外网登录。......
  • fastreport .net打印普通报表
    fastreport.net打印普通报表前言:.net代码层先不记录在这,后续会单独写一篇博客来记录。直接在工具上进行功能点的实现一、效果图二、功能点分页分页小计金额大写三、功能点实现3.1分页这个直接用工具自带的page当前页和TotalPages总页数当前页和总页数是根据当前......
  • ESP32-P4 --- DMA 的使用
    传输类型:DW_GDMA_BLOCK_TRANSFER_CONTIGUOUS申请DMA通道设置DMA传输完成回调函数,在中断中执行 设置DMA的源地址目的地址,启动DMA传输类型:DW_GDMA_BLOCK_TRANSFER_LIST申请DMA通道 申请DMAlinklists设置DMA传输完成回调函数,在中断中执行 设置DMA的源地......
  • 前瞻AI算力规模,超出我们普通常人概念
    前瞻AI算力规模,超出我们普通常人概念:从网上得到的信息,一个语言大模型需要的算力,从中可见一斑,参数规模:1亿个参数,联动需要多大算力支持?4月23日讯(编辑赵昊)据媒体报道,日本软银集团将在今明两年投资1500亿日元(约合9.6亿美元),为其计算设施提供开发“世界级生成式人工智能所需的数......
  • 在 windows 上运行的 podman 默认的挂载相对路径是什么
    我在windows运行podman当成docker的代替品,从网上抄了ollama的部署命令,发现里面存在一个相对路径的挂载文件夹。我期望拿到ollama的下载内容,需要寻找到podman默认的挂载路径,但在网上找了一圈,可能是我的关键词问题,没有找到,于是记录本文期望能帮到大家如下面命令podman......
  • 利用expect交互批量修改普通用户过期密码
    因为公司接了一个密码托管的活,有10000多台机器,系统有openSUSE,SUSE,Ubuntu,centos,Oracle-Linux,而且什么版本都有,不给root权限,密码已经过期很多,先用expect的方式把过期密码修改完成,在进行托管#!/bin/bash#Author:shsnc-****#Time:2021-5-11#Name:for_user.sh#Version:V1.3#D......
  • RocketMQ普通消息
    消息发送分类同步发送消息同步发送消息是指,Producer发出⼀条消息后,会在收到MQ返回的ACK之后才发下⼀条消息。该方式的消息可靠性最高,但消息发送效率太低。在mq集群中,也是要等到所有的从机都复制了消息以后才会返回,所以针对重要的消息可以选择这种方式。异步发送消息异步发......