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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 10392|回复: 16

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

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

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

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

×
本帖最后由 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个
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 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的状态)才会开始继续读数据

回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 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, 2025-8-18 13:41 , Processed in 0.234755 second(s), 4 queries , Gzip On, Redis On.

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