当前位置:首页 > > ZYNQ
		


实验背景

Xilinx DMA IP核是开发中常用的IP核,在ZYNQ开发中经常用到,通常的示例都是在Microblaze或者ZYNQ等带有处理器的工程中演示,使用封装好的函数来进行调用。为了对IP核有一个较为全面的了解,现在使用官方的HDL仿真示例对该IP的一些特性进行分析,达到较为全面理解该IP核的特性与功能的目的,从而在调用函数时能够明白这些函数到底进行了什么样的操作。

实验内容

Xilinx DMA IP核(Enable Micro DMA)官方示例仿真分析。

实验步骤

创建工程,添加DMA IP核,配置如下:

使能Enable Micro DMA

打开官方仿真示例

打开后运行仿真,在Scope页面下有如下模块:

在文档PG021中有如下框图解释各模块的功能

从以上描述可以得知,仿真的大致过程如下:

1. 产生时钟

2. 配置DMA IP核

3. MM2S通道读取AXI Bram Ctrl(在时钟稳定后进行填充)中的数据,并检查数据正确性。

4. S2MM通道通过DMA向AXI Bram Ctrl中写入数据,并检查数据正确性。

由于这里没有使能SG模式,所以没有SG相关的操作,后面的分享会分析SG模式的DMA。

下面开始分析波形,分析的步骤就是上述说明的仿真步骤。首先查看配置模块的波形。

配置过程由AXI Traffic Generator IP实现,该IP核的操作可以参考以下文章

王小二苕:AXI Traffic Generator IP核使用(一)9 赞同 · 2 评论文章

王小二苕:AXI Traffic Generator IP核使用(二)3 赞同 · 0 评论文章

王小二苕:AXI Traffic Generator IP核使用(三)3 赞同 · 2 评论文章

从波形可以看到,配置过程对几个寄存器进行了配置,如下

0x00_00_00_00寄存器配置值为:0x00_00_70_01(32’b111_0000_0000_0001)

bit0为MM2S DMA通道的开启与停止控制位,bit12-14为三种类型中断的使能控制位。

该配置值就是开启MM2S通道,使能三种中断。

0x00_00_00_18寄存器配置值为:

0x00_00_00_00

该寄存器为DMA读取system memory 的源地址(Source address),即MM2S通道读取Bram中的数据的起始地址为0x00_00_00_00。

0x00_00_00_28寄存器配置值为:

0x0C_00_00_40

该寄存器为DMA读取system memory中数据的字节数,由于高26-31为保留部分,所以有效数据为0x40,十进制数为64,即从system memory中读取64字节的数据。

0x00_00_00_30寄存器配置值为:

0x00_00_70_01(32’b111_0000_0000_0001)

与0x00_00_00_00寄存器功能类似,通道为S2MM。

0x00_00_00_48寄存器配置值为:

0x00_00_00_00

该寄存器为S2MM通道写数据到system memory中的目的地址。

0x00_00_00_58寄存器配置值为:

0x0c_00_00_40

该寄存器为S2MM通道写数据到system memory中的数据长度,长度以字节为单位,即64字节的数据。

以上为配置过程,下面查看AXI Bram数据填充与MM2S通道读数据。(System Memory to Stream)。

当时钟稳定后,axi4_write_master模块向axi_bram_ctrl_0模块写入数据,模块连接图如下:

查看axi4_write_master波形

从波形可知,写数据分为两次进行,第一次地址为0x00_00_00_00,第二次地址为0x00_00_00_80,突发length均为0x1f,突发size为2,突发类型为INCR,即一次写操作写入128字节的数据。关于AXI4的突发操作,可以参考如下文章:

王小二苕:Xilinx AXI Bram Ctrl IP核使用(一)6 赞同 · 0 评论文章

下面查看axi_bram_ctrl_0模块,需要说明的是该模块是具有存储数据功能的,Bram在内部例化,该IP核的配置页面如下:

查看该IP核写数据相关信号

依据DMA配置的信息,MM2S需要从axi_bram_ctrl_0模块中读取64字节数据,起始地址为0x00_00_00_00,下面查看读取数据相关信息,如下:

读取的数据字节数,以及起始地址与配置信息一致,读取的数据也是正确的。

由于配置时,使能了中断,下面查看中断信号波形,

可以看到,MM2S通道从axi_bram_ctrl_0读取数据完成后,mm2s_introut信号拉高。

MM2S通道操作完成后,再来分析S2MM通道,当S2MM通道对应的寄存器配置完成后,axis_write_master通过DMA向axi_bram_ctrl_1写入数据,RTL连接图如下:

axis_write_master模块信号如下:

写入数据长度为64字节,下面查看DMA模块S2MM通道信号

可以看到,写入地址为0x00_00_00_00,写入长度为64字节,与配置信息一致。

S2MM通道传输完成后,s2mm_introut中断信号拉高。

axis_data_read和axi_s2mm_read模块为数据检验模块,即检查写入与读出的数据是否一致。

至此,DMA IP核(Enable Micro Mode)MM2S通道和S2MM通道传输数据仿真分析完成。可以看到,对于该IP核,只要弄清楚寄存器的作用以及数据传输方向,就可以基本掌握其使用方法。在ZYNQ或者Microblaze中通过封装好的函数对该IP核进行操作,本质也是配置寄存器。在后面的分享中,将会介绍SG模式的DMA IP核的仿真分析。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭