DMA的有与无
使用DMA时,CPU向DMA控制器发送一个存储器传输请求,这样当DMA控制器在传输的时候,CPU执行其他的操作,传输完成时DMA以中断的方式通知CPU。
有DMA时:DMA可以直接完成设备与内存直接的数据搬运,不需要cpu介入。
因此DMA的引入,数据搬运不需要抢占CPU,因此极大降低了CPU的负荷,但是也引入了新的问题,也就是cpu读取到的数据不一定是最新的,主要由于中间cache的存在,当DMA修改了memory中的内存时,由于cpu读取内存数据会先访问对应内存是否被cache命中,如果命中将直接读取cache中的数据内容,而此时cache中的数据不是最新的,已经被dma修改了。
- ZYNQ中的DMA
ZYNQ提供了两种DMA,一种是集成在PS中的硬核DMA,另一种是PL中使用的软核AXI DMA IP。
在ARM APU(Application Processor Unit,应用处理单元)设计过程中,已经考虑到大量数据搬移的情况,因此在APU中自带了一个DMA控制器DAMC,这个DMAC驻留在PS内,而且必须通过驻留在内存中的DMA指令编程,这些程序往往需要CPU准备,因此需要部分的CPU参与。DMAC支持多达8个通道,所以多个DMA结构的核可以挂载在单个DMAC上。
DMAC与PL的连接是通过AXI-GP接口,这个接口最高支持到32位宽,这也限制了这种模式下的传输速率,理论上最大为600MB/s,这种模式不占用PL资源,但需要对DMA指令编程,会增加软件的复杂性。
为了获取更高的速率,可以空间换时间,在PL中添加AXI DMA IP core,并利用AXI_HP接口完成高速的数据传输。
DMA的数据传输经过S_AXI_HP接口,每一个HP接口都含有控制和数据fifo,这些fifo为大数据量突发传输提供缓冲,使得HP成为理想的高速数据接口。
对DMA的控制或配置通过M_AXI_GP接口(M代表master为PS),传输状态通过中断传达到PS的中断控制器。
使用DMA的优势
使用DMA进行数据传输有几个好处:
-
高效数据处理:DMA可以在不占用CPU的情况下,直接在系统内存和Aurora IP之间传输数据,这可以显著提高数据处理效率。
-
降低CPU负载:通过减少CPU参与的数据搬运操作,可以释放CPU资源处理其他任务。
DMA作为内存访问技术,允许某些计算机内部的硬件子系统可以独立的直接读写内存,而不需要CPU介入处理,从而不需要CPU的大量中断负载,否则,CPU需要从来源吧每一片段的数据复制到寄存器,然后在把他们再次写回到新的地方,在这个期间,CPU无法执行其他指令。而使用DMA时,CPU向DMA发送一个存储传输请求,这样当DMA控制器在传输的时候,CPU可以执行其他指令操作,完成传输后DMA以中断的方式通知CPU。
-
提高吞吐量:DMA能够支持高数据率传输,满足高速数据流的需求。