0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

对DMA的理解和认识

安芯教育科技 来源:芯工阿文 2023-08-08 09:31 次阅读

本文选自极术专栏“IC设计”,作者芯工阿文,授权转自微信公众号芯工阿文,本篇主要讲述对DMA的理解和认识。

这些天有个想法,在数字芯片设计中,很多模块都可以近似为DMA模型,包括CPU。基于该想法进行扩展,一些复杂的模块可以变得稍微容易理解。

首先描述一下什么是DMA,Direct Memory Access,字面意思就是直接内存访问。个人认为这个名词应该是从软件视角进行定义的。实际上,DMA完成的工作,无非就是从一个接口读取数据,再发送至另外一个接口,也就是对应着一读一写。从硬件角度来看,这个是很常规的操作,但在软件看来,可以将大量的操作卸载到DMA,从而将CPU释放出来做更多的事情。所以DMA实际完成的工作也就是数据的转移,基于转移的两个方向之间的差异和特征,从而带来各种收益。

数据转移,简单来说有3个要素,源地址、目的地址和数据长度。一般来说,DMA的实现有两种方式,一是Direct DMA,另一个是链表DMA。Direct DMA就是通过寄存器读写的方式直接配置上述的3个要素;链表DMA就是将保存上述3要素的描述符存放于内存,再将其地址信息配置至DMA,启动DMA后,解析描述符后做数据转移。

链表DMA的处理流程近似如下:

1)根据配置信息启动描述符读取操作,解析描述符;

2)基于描述信息,获取源地址和数据长度,启动数据读取操作;

3)读取数据返回后,再将数据发送至目的地址,完成后告知状态。

以此进行扩展,比如读取数据返回后,做各种运算,再将结果发送至目的地址,不少加速计算模块均是基于该思路进行处理的。再比如描述符读取做一些处理,支持多样化的描述符,或者描述符再嵌套描述符,等等。

个人认为,在SOC芯片内的几乎所有计算模块,均可以基于DMA的模型进行理解,再以此进行扩展开发,包括CPU。

再来看一下CPU是如何工作的,没有深入了解CPU的结构,仅仅知道大概,如有错误,请轻喷。首先,CPU基于起始地址,从该地址读取指令,再执行。一般来说,执行指令会伴随着数据读取,也就是LOAD,将数据搬运过来之后,再对数据做各种运算,完成后再将数据放回去,对应着STORE。这个过程是否跟DMA搬运数据非常类似?如下是对应关系。

a00bd496-3587-11ee-9e74-dac502259ad0.png

图1

两者之间有非常近似的对应关系,基本原理是一样的,只是在具体实现过程中,存在较大的差异。如描述符,对于DMA,仅有有限的几个格式,不同实现有不同的指令格式,对于CPU,指令集就相当于描述符,类型很多,不同架构有不同的指令集,由此也会引入很多问题,其复杂度是DMA的很多很多倍,如CPU需要Cache,但是从没听说过DMA需要使用Cache。

还有一个明显差别,CPU有计算逻辑ALU,通常来说,DMA将数据从源地址搬回来后,就直接写到目的地址。这里再换个思路,如果在这两者中间,加入一点计算逻辑,比如压缩解压缩、编解码等等,是否与很多硬件加速器的架构基本是一致的?

可以看到,CPU和DMA之间,差不多就是两个极端。CPU是属于general purpose,DMA是目的性非常强的设计。在这中间取一个点,是否就可以对应GPUAI、DSA等等场景?

前一段时间想做点事情,设计一个DMA,但在数据读取和写入之间开放一个接口,在这接口之内做一些计算逻辑,以此针对各种具体的数据计算场景,基于需求进行设计。也就是说,将这个DMA作为一个平台,基于该平台做后续的二次开发。但是,在梳理上述的概念之后,发现其实现在已经有类似的东西,也就是RISC-V。该指令集是完全开放的,当前也有各种各样的开源代码,有Verilog实现的,还有chisel,也有spinalHDL,完全可以基于这些代码做针对需求场景的二次开发,而且可以从更小的数据粒度进行操控。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10829

    浏览量

    211182
  • 接口
    +关注

    关注

    33

    文章

    8526

    浏览量

    150861
  • IC设计
    +关注

    关注

    37

    文章

    1292

    浏览量

    103780
  • dma
    dma
    +关注

    关注

    3

    文章

    559

    浏览量

    100446
  • 数字芯片
    +关注

    关注

    1

    文章

    108

    浏览量

    18374

原文标题:把DMA当作一个模型

文章出处:【微信号:Ithingedu,微信公众号:安芯教育科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    DMA 串口传输原理解

    从这个角度来说,DMA 并没有加快串口本身的传输速度,只是解放了 CPU 资源而已。但是 CPU 被解放了, DMA 所使用的 缓存 资源可不能也随之解放呀,只能等发送完毕后才能释放。所以最简单的方法是在 缓存 前面加一个 static 。
    发表于 09-16 10:04 1604次阅读
    <b class='flag-5'>DMA</b> 串口传输原<b class='flag-5'>理解</b>析

    10行代码,就能让你真正理解DMA

    dma
    YS YYDS
    发布于 :2023年05月22日 15:44:18

    F28335 DMA设置代码的理解

    吗?我的理解是如果AD采样频率是64HZ的话,DMA的中断频率差不多是1HZ。然而我不论是设置采样频率为2000HZ还是2HZ,DMA产生中断的频率都没有变化。不知道是我理解有错还是什
    发表于 06-25 08:26

    K60的UART模块带DMA接口怎么理解

    请教下UART带DMA接口怎么理解啊?我想用K60的UART做一个485通信,主要的功能就是用K60做上位机读取下位机的数据,这个过程可以用485的通信协议来传输数据,但是怎么利用一下DMA接口呢
    发表于 02-23 10:40

    如何理解DMADMA配置过程是怎样的?

    如何理解DMADMA配置过程是怎样的?
    发表于 02-14 06:51

    关于stm32f1中的ADC和DMA理解

    怎样去校准stm32f1中的ADC呢?怎样去理解stm32f1中的ADC和DMA呢?
    发表于 02-21 06:05

    DMADMA控制器

    DMA(Direct Memory Access)的概念DMA方式不用处理器干预完成M与I/O间数据传送。DMA期间系统总线由其它主模块控
    发表于 12-09 11:03 50次下载
    <b class='flag-5'>DMA</b>与<b class='flag-5'>DMA</b>控制器

    dma是什么意思? 什么是dma?

    dma是什么意思? 什么是dma? DMA的英文拼写是“Direct Memory Access”,汉语的意思就是直接内存访问,是一种不经过CPU而直接从内存了存取数据的数据交换模式
    发表于 04-17 17:06 3.5w次阅读
    <b class='flag-5'>dma</b>是什么意思? 什么是<b class='flag-5'>dma</b>?

    镍电池的理解认识

    镍电池的理解认识 镍氢电池也有记忆效应,只是没镍镉电池明显。记忆效应最不明显的是锂电池。  记忆效应不明显意味着,可以多次充电
    发表于 11-05 16:16 1648次阅读

    STM32串口DMA问题详解

    昨天晚上在STM32串口DMA的问题上纠结了好长时间,所以今天上午写篇博客来谈谈我对串口DMA发送的理解
    的头像 发表于 10-27 16:16 8424次阅读
    STM32串口<b class='flag-5'>DMA</b>问题详解

    单片机的RAM和FLASH认识理解

    最近在一个问答社区回答了一个问题,关于单片机存储器的,于是有了想专门写一篇关于单片机存储器的想法。作为单片机内部一个重要组成部分,存储器占有很重要的地位,今天就来聊聊我对于单片机的内部存储器RAM和FLASH的一些认识理解
    的头像 发表于 05-03 18:17 1.1w次阅读
    单片机的RAM和FLASH<b class='flag-5'>认识</b><b class='flag-5'>理解</b>

    16、STM32——DMA详解

    的事情,好像是多线程一样。数据传输支持从外设到存储器或者存储器到存储器,这里的存储器可以是 SRAM 或者是 FLASH。DMA 控制器包含了 DMA1 和 DMA2,其中 DMA1
    发表于 12-02 13:51 21次下载
    16、STM32——<b class='flag-5'>DMA</b>详解

    STM32使用DMA控制器试验总结

    在使用串口DMA试验过程中,遇到了一些问题,通过试验找到了问题所在,也对DMA的应用有了新的认识,仅以此分享给大家,不足之处请多多指教。DMA初始化// 串口对应的
    发表于 12-03 09:21 7次下载
    STM32使用<b class='flag-5'>DMA</b>控制器试验总结

    STM32F1 ADC和DMA的简单理解

    本文主要讲解stm32f1中ADC和DMA的使用,在学习中参考了多篇文章,感谢前辈的付出。STM32F10X ADC多通道读取小教程(包含DMA)_JameScottX的博客-CSDN博客STM32
    发表于 12-27 19:09 35次下载
    STM32F1 ADC和<b class='flag-5'>DMA</b>的简单<b class='flag-5'>理解</b>

    STM32学习笔记(串口+DMA)

    小焦的STM32学习日志(一)2020.4.20数据位大小与大端小端:实际应用:`assert_param();`函数的理解:串口配合DMA的使用方法回顾:实现平台说明:重要的初始化内容:需要额外
    发表于 12-27 19:22 23次下载
    STM32学习笔记(串口+<b class='flag-5'>DMA</b>)