[X]关闭

关于DMA批量发数据到PS的几点疑惑?

文档创建者:kernelstory
浏览次数:7229
最后更新:2019-09-24
在学习DMA批量传输数据到PS和使用模块AD7606这几个章节内容时,在疑惑XAXIDMA_SimpleTransfe()这个函数对应的DMA行为。
(1)         PL端一直在采集数据(或者在PL端一直在构造数据),当达到一定数量时(比如1024后,拉起tlast信号,此时数据仅在第一级axis_data_fifo中,如何与之后的axis_dwidth_converter, axi_DMA之类的IP进行流数据交互)?
(2)        在SDK端使用XAXIDMA_SimpleTransfe()函数来发起DMA数据传输,长度比如1024个数据,方向S2MM,完成后进中断后,之后或者显示,或者lwip发送。我想请问,这个缓存机制下,采集慢,读取快,再加上FIFO缓存,数据不会丢。但是DMA读取的数如何保证是本次采集或者构造的1024个数据?由于一直在采集或者构造数据,axis_data_fifo中的数据需要被读走,不然会满,这里边的机制或者代码啥的,请大佬提点一下?

发表评论已发布 3

uisrc

发表于 2019-9-24 11:28:46 | 显示全部楼层

第一个问题:用户代码用tlast拉起后,会通知DMA IP核产生中断,DMA IP核负责搬运运输,只有当DMA把数据全部搬运完,DMA的中断参会产生。
第二个问题:采用乒乓操作可以获得最大的带宽能力,如果超过这个带宽能力,显然会丢数据。这个和lwip搬运的速度快慢也有关系。这里显然带宽的限制在lwip部分,而不在DMA.
越努力越幸运!加油!

kernelstory

发表于 2019-9-24 14:38:22 | 显示全部楼层

msxbo 发表于 2019-9-24 11:28
第一个问题:用户代码用tlast拉起后,会通知DMA IP核产生中断,DMA IP核负责搬运运输,只有当DMA把数据全部 ...

在问题二中,XAXIDMA_SimpleTransfer()和LWIP()部分可以做到传输较快,其实设计本来就应该比PL中FIFO的存储速度要快。
可是当下一次XAXIDMA_SimpleTransfer()启动时,stream_data_fifo中的数据完全有可能并未存够本次转移方向S2MM的长度,所以又回到问题
中,PL端stream流的控制,DMA此时有等待标记?等DMA中的tlast吗?

ぉ沙皮狗的忧伤

发表于 2019-9-24 16:41:04 | 显示全部楼层

老哥,我最近也在搞AXI总线传输,有几点疑问想向你请假
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则