首先构建AXI DMA例程使用的硬件环境,在这个设计中,我们用DMA将内存中的数据传输到IP模块中,然后传输会内存,原则上这个IP模块可以是任意类型的数据产生模块,如ADC/DMA,在本例程中,我们使用FIFO来作为环路进行测试。如图2所示。 图2 本例程结构示意图 如图2所示,我们在PL中使用AXI DMA和AXI Data FIFO模块,AXI Lite...
printf("XAxiDma_SimpleTransfer(XAXIDMA_DMA_TO_DEVICE) failed! ret=%d\n", ret); goto err; } // DMA开始接收数据 ret = XAxiDma_SimpleTransfer(&xaxidma, (uintptr_t)bram2_data->numbers_out, sizeof(bram2_data->numbers_out), XAXIDMA_DEVICE_TO_DMA); if (ret != XST_SUCCESS) { pr...
printf("XAxiDma_SimpleTransfer(XAXIDMA_DMA_TO_DEVICE) failed! ret=%d\n", ret); goto err; } // DMA开始接收数据 ret = XAxiDma_SimpleTransfer(&xaxidma, (uintptr_t)bram2_data->numbers_out, sizeof(bram2_data->numbers_out), XAXIDMA_DEVICE_TO_DMA); if (ret != XST_SUCCESS) { pr...
{ compatible = "xlnx,axi-dma-mm2s-channel"; dma-channels = <1>; xlnx,datawidth = <64>; xlnx,device-id = <0>; interrupt-parent = <&intc>; interrupts = <0 29 4>; }; dma-s2mm-channel@40400000 { compatible = "xlnx,axi-dma-s2mm-channel"; dma-channels = <1>; xlnx,data...
如图,AXI DMA主要包括Memory Map和 Stream两部分接口,前者连接PS子系统,后者则连接带有流接口的PL IP核。 其最简单的事直接寄存器模式(Simple DMA),这里需要注意地址对齐的问题:当没有使能地址重对齐的情况下,如果AXI Memory Map数据位宽是32bit,则搬移数据所在地址必须在0x0,0x4,0x8等起始地址上。接下来关注DMA...
AXI DMA可以有两个传输方向:读通道和写通道,依次为MM2S和S2MM方向。也就是说“读”和“写”是DMA主动对CPU发起的操作。重点查看以下几个参数: 1 Width of Buffer Length Register: 在直接寄存器模式下,它指定在MM2S_LENGTH和S2MM_LENGTH寄存器的有效比特数。MM2S_LENGTH寄存器指定了MM2S通道传输数据字节数,当CP...
将ila的probe0、probe1与axi_dma_0的mm2s_introut、s2mm_introut连接。 Step23:选中top.bd,右单击然后选择Generate Output Products。 Step24:选中top.bd,右单击然后选择Create HDL Wrapper,在弹出来的窗口中直接点击OK。 Step25:添加一个名为XDC约束文件。
AXI DMA和AXI4 Stream Data FIFO在PL中实现。处理器通过M_AXI_GP0接口与AXI DMA通信,以设置、启动...
添加DMA IP,如同添加Zynq UltraScale+ MPSOCIP,只不过搜索词由MPSOC变为dma,如下图所示: 图21.3.7添加DMA模块 图21.3.8配置DMA模块 我们双击axi_dma_0,打开配置界面,如图21.3.8所示,此处我们只需要取消勾选Enable Scatter Gather Engine即可。不过还是介绍下与配置相关的选项。 ...
图16.1.1 DMA存储传输过程 DMA存储传输的过程如下: 1. 为了配置用DMA传输数据到存储器,处理器发出一条DMA命令 2. DMA控制器把数据从外设传输到存储器或从存储器到存储器,而让CPU腾出手来做其它操作。 3. 数据传输完成后,向CPU发出一个中断来通知它DMA传输可以关闭了。