基于xilinx vivado 的DDR3 IP核扩展IP FDMA 的使用详解

1 概述

本文是关于FDMA ip的使用详解,主要从ip的设置与使用两方面介绍。

FDMA 是 MSXBO(米联客的)基于 AXI4 总线协议定制的一个 DMA 控制器。 有了这个 IP 我们可以统一实现用 FPGA 代码直接读写 PL 的 DDR 或者 ZYNQ PS 的 DDR。

通过这个 IP 我们可以方便地进行 AXI4 FULL MASTER 的操作,比如我们经常要读写 DDR,那么只要挂到 AXI4 总线上就可以利用这个 IP 实现。

2 参考文档

《02_Artix FPGA DDR控制器MIG使用(AXI4)(MA703FA-35T)20190401》

3 FDMA的BD工程搭建

使用FDMA时一般都是需要调用DDR时,这是DDR使用AXI4接口生成。而都是使用AXI4接口时,工程使用Block Design(简称BD)方式搭建。

当设置好DDR IP,FMDA IP后点击”run connection automation”则可自动生成rst_mig_*,axi_interconnect_*的IP,并帮助连接。如下图所示:


在这里插入图片描述

图 1 FDMA与DDR的BD工程示例

3.1 DDR IP的设置简介

DDR3的设置相信一般会使用DDR的工程师都了解,笔者这里就不做详细说明,只是讲解几页比较重要的位置,具体请往下看。

在这里插入图片描述

图 2 DDR的型号、时钟、位宽设置页

​ 上图中的时钟是DDR的内核时钟,位宽是DDR的数据位宽与器件直接相关。按上图设置,则DDR的数据速率为:400x2x16=1600MByte/s。

​ 而用户侧使用的时钟与PHY to Controller Clock Ratio直接相关,如上图中的设置,则ui_clk = 400/4 =100MHZ。


在这里插入图片描述

图 3 DDR的AXI数据参数设置页

上图中的data width是MIG AXI4最大支持的位宽,这个设置按能设置的最大位宽设置,才能最好的使用DDR的带宽。

结合图 2中得出的用户时钟ui_clk,则可以算出用户侧的数据速率为:100M*128bit=1600MByte/s,即用户侧的带宽与DDR的实际速率相同。

在这里插入图片描述

图 4 DDR的输入时钟设置页

​ 上图中的input clock perild是输入给DDR 参考时钟,相当于DDR器件的系统时钟。

​ 其他设置页都是些常规设置,笔者在这里就不做说明了,相信读者自己能够理解。

3.2 FDMA的设置

FDMA是米联客编写的IP,非xilinx官方IP,则在使用时应当首先加入到vivado的ip系统中。添加方式如下图所示:

在这里插入图片描述

图 5 自制IP的添加到vivado的示例

在这里插入图片描述

图 6 FDMA的界面设置

​ FDMA的设置如上图 6所示:

  1.    BURST LEN:是AXI一次突发的数据个数,这个根据读者需要自行设置;
    
  2.    AXI ID WIDTH:是AXI的标识符位宽,这个一般不用关心,默认即可。
    
  3.    DATA WIDTH:这个是AXI的数据位宽,设置时需要与DDR IP的设置保持一致;
    

3.3 FDMA的信号定义

表 1 信号定义

序号信号I/O说明
1A00_AXIX与DDR IP连接的AXI信号
2M00_axi_aresetnIip复位信号,低有效
3pkg_wr_areqI写数据请求信号,一个脉冲有效
4pkg_wr_enO写数据有效指示信号,
5pkg_wr_lastO写一包数据写完指示信号
6pkg_wr_addrI写数据地址
7pkg_wr_dataI写数据
8pkg_wr_sizeI写一包数据个数指示信号
9pkg_rd_areqI读请求信号,一个脉冲有效
10pkg_rd_enO读数据有效指示信号
11pkg_rd_lastO读一包数据读完指示信号
12pkg_rd_addrI读地址
13pkg_rd_dataO读数据
14pkg_rd_sizeI读一包数据的大小指示信号

上面信号中需要注意的有:

  1.    pkg_*_size:设置的大小需要为BURST LEN的整数倍,这样才能保证一包数据能够完整传输;
    
  2.    pkg_wr_en:这个写使能是IP输出的,而写数据是需要输入给IP,方向不一致,则建议使能与数据采用组合逻辑响应,不要延时。
    

4 上板测试示例

FDMA按照图 6设置,且pkg_wr_size设置为0D256,则一包突发的数据为256128bit=4096Byte。上板验证也是256个时钟的128bit数据即一次发送256128bit=4Kbyte数据,如下图所示:

在这里插入图片描述

图 7 FDMA的上板写验证

​ 由上图中可知FDMA输入数据的时序为:当数据准备好后,发起一拍pkg_wr_areq,然后等待pkg_wr_en,看到pkg_wr_en拉高的同时输入数据pkg_wr_data,直到pkg_wr_last拉高结束一组数据的写入。然后就可发起下一次pkg_wr_areq。

​ 读时序与写时序基本一致,只是数据和使能都由FDMA输出罢了,这里就不详细说明了。

5 附件

FDMA下载链接

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Xilinx Vivado DDR3 IP核可以用于处理DDR3存储器的读写操作。该IP核提供了一个接口,用户可以通过该接口与DDR3存储器进行通信。 使用VivadoIP核生成器,可以轻松地将DDR3 IP核添加到设计中。首先,打开Vivado并创建一个新的项目。接下来,进入IP核库,选择DDR3 IP核并添加到设计中。 在IP核配置界面,用户可以设置一些参数,如存储器的大小、数据位宽、时钟频率等。根据实际需求进行配置后,生成IP核。 生成的IP核将提供读写接口。用户可以通过设置地址和数据来进行读取和写入操作。例如,使用写使能信号和写数据信号来进行写入操作,使用读使能信号来进行读取操作。同时,根据接口参数,选择相关的时序控制信号和使能信号。 为了测试读写接口,可以编写一段简单的测试代码。通过地址和数据输入,模拟写入操作,然后通过读使能信号读取相应位置的数据进行验证。在编写测试代码时,需要确保正确设置时序和使能信号,以保证与DDR3存储器的正常通信。 测试阶段,可以使用硬件测量工具来检查时序和信号的正确性。确保时钟频率、写和读操作的时序满足DDR3存储器的要求。 总结起来,使用Xilinx Vivado DDR3 IP核可以实现与DDR3存储器的读写接口。通过设置参数、编写测试代码和使用硬件测量工具,可以有效测试和验证读写接口的功能和正确性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风中月隐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值