在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 9040|回复: 16

[原创] DMA 原理疑问---流控制

[复制链接]
发表于 2019-11-27 09:16:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 494693243 于 2019-11-29 13:53 编辑

楼主手头有一份关于DMA 的资料,这个DMA 是AXI master 接口的,带有8 个channel 和 16 对 dma_req/dma_ack 握手信号, 其中每个channel 都有自己的配置寄存器, 每个寄存器中都有其[12:9] 来配置目的请求信号源,
spec 描述如:Destination handshake request source select,
0: use the dma_req[0]/dma_ack[0]
……
15: Use thedma_req[0]/dma_ack[0].

同时配置寄存器中的[6:3] 位来配置源请求信号源,spec 描述:
source handshake request source select。

楼主理解的DMA 是, 同一时间每一个channel 只能处理一个req, 每一次的req 都有其对应的源地址和目的地址。也就是主要有一个req,配置参数都正确的情况下, DMA 就能完成从源地址到目的地址的传输。
所以楼主理解的是 不需要分开 Destination handshake request source 和 source handshake request source 就能完成DMA 传输, 跟spec 介绍的出入很大,所以楼主请教大家对此的理解是什么样的, 请不吝发言

再补充一句: 楼主说的这个DMA 中, 两种请求的配置是可以同时使能的



发表于 2019-12-7 09:31:06 | 显示全部楼层
8个channel,每个channel含C2H方向、H2C方向(host to card),C2H方向就是把数据上送,需要地址、长度、数据到内存地址;而H2C方向,需要先发一个包含地址、长度的请求,root point才会把数据发送下来。那么这个8 C2H方向的上送数据和 8个H2C方向的请求就需要进行仲裁,req 和 ack,恰好是16个
 楼主| 发表于 2019-12-11 10:02:21 | 显示全部楼层


zjwsh001 发表于 2019-12-7 09:31
8个channel,每个channel含C2H方向、H2C方向(host to card),C2H方向就是把数据上送,需要地址、长度、数 ...


您好!
   我的理解是,
     1. src 和dst 请求都使能的情况下,src 的请求来到之后从 src address 读数据进入DMA,等到dst 方向的请求来到之后,从dma 往外抛出数据
     2. 只有src 或者dst 使能的情况下,只要等到src 或者dst 的请求到来,dma 就会从src address 读取数据并且抛到dst address


不知道这样理解是否正确?
发表于 2019-12-12 11:18:43 | 显示全部楼层


494693243 发表于 2019-12-11 10:02
您好!
   我的理解是,
     1. src 和dst 请求都使能的情况下,src 的请求来到之后从 src address 读数 ...


axi不都是要求src和dst有req和ack信号么

 楼主| 发表于 2019-12-16 09:22:15 | 显示全部楼层


寂寞的羔羊 发表于 2019-12-12 11:18
axi不都是要求src和dst有req和ack信号么


请教个问题:既然说AXI 每个通道都要求有src 和 dst 的req 和ack 信号,
那如果我当前只到来了src 的req, 那么dma 就会去读数据,如果dst 的req 迟迟不来,岂不是会卡死dma

发表于 2019-12-16 11:19:57 | 显示全部楼层


494693243 发表于 2019-12-16 09:22
请教个问题:既然说AXI 每个通道都要求有src 和 dst 的req 和ack 信号,
那如果我当前只到来了src 的req ...


你这个说法不是特别准确
首先,读数据的时候,dma是作为master,src是作为slave,那么读的req是dma发出来的,src返回ack;
写数据的时候,dma作为master,dst作为slave,写的req也是dma发出来的,dst返回ack;

dma内部一般都有缓存数据的fifo,当读满fifo后,dma就不会发读的req了,此时如果dma发出的写req没有ack返回(dst没有处于ready状态),那么dma就不动了,直至写数据发出去(fifo处于非full的状态)才会开始继续读数据

 楼主| 发表于 2019-12-19 20:18:20 | 显示全部楼层


寂寞的羔羊 发表于 2019-12-16 11:19
你这个说法不是特别准确
首先,读数据的时候,dma是作为master,src是作为slave,那么读的req是dma发出来 ...


您说的这种情况: DMA 向 从机发送req, 跟楼主手头的资料是相反的。
楼主手头的资料是: 外设向DMA 发送req ------  当配置完DMA 的描述符启动DMA 后, DMA 会等待 src 端的req 进行读数据,会等待dst 端的req 进行写数据
发表于 2019-12-23 11:04:19 | 显示全部楼层


494693243 发表于 2019-12-19 20:18
您说的这种情况: DMA 向 从机发送req, 跟楼主手头的资料是相反的。
楼主手头的资料是: 外设向DMA 发送 ...


可能你用的比较特殊吧,我用的dma不论读还是写,都是作为master发起的
当然了,配置dma的时候,dma是作为slave的

发表于 2019-12-31 13:04:02 | 显示全部楼层
我用的是synopsys家的dma,只有p2m,m2p,p2p,m2m几种模式,dma必须是master,有流控,设置好外设或者memory接口就可以了,外设通常都是硬件握手信号,可以给memory模拟个软件握手信号
发表于 2020-6-10 11:48:20 | 显示全部楼层


zzj0329 发表于 2019-12-31 13:04
我用的是synopsys家的dma,只有p2m,m2p,p2p,m2m几种模式,dma必须是master,有流控,设置好外设或者memory ...



你好,
     
我有点不明白的是,我目前用的也是synopsys的DMA,从Synopsys给的databook来看,memory是不需要handshaking interface的,通过HREADY就可以插入等待了。当是p2m,或者p2p,m2p时,外设与DMA之间的行为是这样的,外设发送req给DMAC,DMAC返回ack给外设,和你说的方向刚好是相反的,不知道如何理解
企业微信截图_20200610114702.png

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-28 13:08 , Processed in 0.026192 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表