ZYNQ | AXI DMA数据环路测试

背景

由于最近项目需要使用到AXI DMA来进行数据的传输,于是搭建了一个AXI DMA的环路来对AXI协议和DMA进行学习。

软硬件平台

软件平台:vivado2018.3 SDK开发套件
硬件平台:米联客MZ702N

原理概述

本实验通过PS端的ARM先将数据发送给DDR,然后PS端控制DMA通过数据通道读取DDR中的数据,DMA将读取到的数据传给FIFO,FIFO又将数据传输给DMA,PS控制DMA通过数据通道将数据写入DDR中,控制DMA对DDR数据进行读写和校验,完成环路测试,然后进行传输校验,当接收与发送的数据不一致的时候,进行报错。

工程搭建

1.新建一个vivado工程

2.创建block design

①zynq ip核的添加与配置

点击Create Block Design
在这里插入图片描述

点击上图中右侧的+,输入zynq,双击添加zynq ip核。
在这里插入图片描述
添加完后,双击zynq ip核,进行如下配置。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置结束后点击OK,可以看到下图界面。

在这里插入图片描述
点击Run Block Automation,可以看出引出了DDR和FIXED_IO,手动连接FCLK_CLK0和M_AXI_GP0_ACLK。
在这里插入图片描述
至此,zynq ip和的配置结束。

②AXI DMA ip核的添加与配置

该ip核的添加方式仿照添加zynq ip核的方式,点击+,输入AXI DMA,双击添加ip核。
在这里插入图片描述
双击ip核,按下图配置。
在这里插入图片描述

③AXI4-Stream Data FIFO核的添加与配置

点击+,输入AXI4-Stream Data FIFO,双击添加ip核。

在这里插入图片描述
双击ip核,按下图配置。
在这里插入图片描述

④让vivado自行添加余下ip核

必要的ip已经添加完毕,剩下的可以通过点击Run Connection Automation来让vivado自行添加(当然你也可以手动添加), 勾选Run Connection Automation界面中的All Automation,点击OK,vivado即刻为你连线。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小技巧:Regenerate Layout没事就 Regenerate Layout 一下

上图即为Regenerate Layout后的block design。
可以通过在上图空白处点击右键 > Regenerate Layout来实现重新排线,使得block design变得整洁。
在这里插入图片描述

⑤连接未连接的部分

由于本实验是进行回环测试,所以需要将 AXI4-Stream Data FIFO 的 一些端口连接到 AXI DMA 的一些端口,如下表所示:

S_AXIS(FIFO)连接到M_AXIS_MM2S(AXI DMA)
M_AXIS(FIFO)连接到S_AXIS_S2MM(AXI DMA)
s_axis_aresetn(FIFO)连接到peripheral aresetn(Processor System Reset)
s_axis_aclk连接到FCKL0(zynq ip)

连接完成后如下图所示:
在这里插入图片描述
现在还剩最后的中断部分没有连接,我们把DMA的2个中断信号,通过concat ip连接到zynq ip核,concat ip如下:
在这里插入图片描述
concat ip配置如下:
在这里插入图片描述
连接方法如下表所示:

mm2s_introut连接到in0
s2mm_introut连接到in1
dout连接到IRQ_F2P

连接完成后如下图:
在这里插入图片描述

⑥可选:添加ILA ip核观察DMA的2个中断信号

我们通过添加ILA ip来观察DMA的中断信号mm2s_introut和s2mm_introut,点击+,输入ILA,双击添加ip核,ip核如下:

在这里插入图片描述
ILA配置如下:
在这里插入图片描述
连接方法如下表所示:

clk连接到FCLK_CLK0(zynq ip)
probe1连接到s2mm_introut(DMA)
probe0连接到mm2s_introut(DMA)

连接完成后如下图:
在这里插入图片描述
至此就完成了工程框架的搭建。保存BD工程,先点击图中序号①处的图标进行验证,验证操作会对整个BD工程进行验证以及调整,验证成功后,点击左侧BD工程 > 右键 > Generate Output Products,成功后,点击 Create HDLWrapper,成功后,生成bit流文件。

在这里插入图片描述
生成bit流文件后,点击菜单栏中的File > Export >Export Handware,然后点击Launch SDK,然后进入sdk开发部分。

在这里插入图片描述

3.新建一个SDK工程

打开SDK软件后,点击菜单栏中的File > New >Application Project,新建一个工程。本文工程名为DMA_LOOP。
在这里插入图片描述
点击Next,选择Empty Application >Finish ,工程创建完毕。在这里插入图片描述

4.放入源码

将米联客提供例程中的SDK工程的源文件复制。
在这里插入图片描述
打开SDK,点击SDK工程中src右键粘贴,软件会自动编译。
在这里插入图片描述
粘贴完后可见到下图所示。
在这里插入图片描述

5.验证测试

step1:在SDK中,点击DMA_LOOP文件夹,右键 >Debug As>Debug Configurations > 双击序号① > 勾选序号②③ > 点击Apply ,完成到这步时候,连接好FPGA的电源,串口线(用来打印信息),jtag线(用来下载bit流文件到板子上),打开电源,点击Debug,之后会跳出Debug调试界面。在这里插入图片描述在这里插入图片描述

step2:在Debug调试界面连接好串口显示(SDK Terminal),点击下图右侧加号,选择好串口对应的com号和波特率,点击OK

在这里插入图片描述
在这里插入图片描述
显示下图即为串口连接成功。
在这里插入图片描述
小tips:串口号可以在我的电脑,右键管理 >设备管理器中的端口选项中查看。
在这里插入图片描述

step3:设置ila触发。在vivado工程中点击Open Target>Auto Connect
在这里插入图片描述
连接成功后如下图:
在这里插入图片描述
设置触发条件、观察信号。
(1)设置波形偏移500。
Settings >Trigger position in window:500
(2)Trigger Setup > 点击+添加触发信号axi_dma_0_mm2s_introut,设置Value为R。如图所示。
(3)点击序号⑤处,使得Ila处在等待触发状态。
在这里插入图片描述
在这里插入图片描述
step4:SDK中点击运行
在这里插入图片描述
当中断触发的时,VIVAIDO中Hardware Manager出现捕捉波形,如下图所示:
在这里插入图片描述
SDK端显示:
在这里插入图片描述
step5:观察数据
打开Memory:Window >Show View > Memory
在这里插入图片描述
在这里插入图片描述
点击添加要观察的数据的地址,可以通过该地址来观察内存中的数据,地址为0x13000000

点击加号,输入0x13000000
在这里插入图片描述
为了观察一次收发数据:设置断点,重新让收发程序跑一次。
在这里插入图片描述
重新运行一次程序 ,收发一次,从内存中读取的数据如图:
在这里插入图片描述
发送量是2047。接收数据一致,测试结束。可以看到第一个数据是0x0c,后面是依次加1,一次接收的数据量是2047。发送数据也是0x0c后面依次加1,至此AXI DMA数据回环测试结束。

参考文档

米联客XILINX_ZYNQ裸机篇2019版

  • 9
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Zynq是一款集成了ARM处理器和可编程逻辑的系统级芯片。AXI DMA(Advance Extensible Interface Direct Memory Access)是Zynq中用于数据传输的IP核。循环读取是一种使用AXI DMA实现连续数据传输的方法。 循环读取是为了实现数据流的连续性,也就是通过持续地读取数据来实现数据的无缝传输。在Zynq的设计中,AXI DMA可以通过配置寄存器和相关设置来实现循环读取。 首先,需要配置AXI DMA的传输模式为循环模式。循环模式下,AXI DMA会在读取完一块数据后,自动跳转到下一块数据进行读取,实现循环的效果。这样就可以实现在连续的周期中不断地读取数据。 其次,需要设置相关寄存器来确定数据的传输大小和存储位置。可以通过设置源和目标地址,以及传输长度来确定数据的读取范围。在循环读取中,需要将目标地址设置为缓冲区的起始地址,然后设置传输长度为缓冲区的大小,这样可以实现在循环中不断地将数据写入缓冲区。 最后,需要在ARM处理器中编写软件代码来控制AXI DMA的启动和停止。可以通过编写中断处理函数,当AXI DMA完成一次传输时,触发中断,并在中断处理函数中判断是否继续进行下一次传输。通过循环读取的方式,可以实现连续地读取数据,并在需要时进行处理或存储。 总之,使用ZynqAXI DMA实现循环读取需要配置AXI DMA的传输模式、设置传输的地址和长度,并编写相关的软件代码来控制传输的启动和停止。这样可以实现在连续的周期中循环读取数据,以满足特定应用的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值