基于AXI总线的DDR3读写测试

描述

本文开源一个FPGA项目:基于AXI总线的DDR3读写。之前的一篇文章介绍了DDR3简单用户接口的读写方式:《DDR3读写测试》,如果在某些项目中,我们需要把DDR挂载到AXI总线上,那就要通过MIG IP核提供的AXI接口来读写DDR。

下面围绕Vivado BD工程的搭建以及各个IP的使用简单介绍一下该项目。

01软硬件平台

  • 软件平台:Vivado 2017.4;
  • 硬件平台:XC7A35TFTG256-1;

02创建Vivado BD工程

2.1 Clocking Wizard

首先在BD工程中添加Clocking Wizard IP核,用于给MIG IP核提供200M时钟以及复位信号。

AXI总线

2.2 MIG IP

添加MIG IP核,接口已经默认配置成AXI接口。

AXI总线

  • Clock Period:这里配置成400Mhz;
  • Data Width:采用16bits;

AXI总线

  • AXI参数配置:Data Width 配置成128 bits。DDR3是双沿工作,并且工作频率和用户时钟频率为4:1,因此这里AXI总线位宽最大可配置为16bits42=128bits;

AXI总线

  • MIG IP核输入时钟:200MHz;

AXI总线

  • 系统时钟:No Buffer;
  • 参考时钟:选择Use System Clock;

AXI总线

配置好MIG IP后,将其与时钟模块(Clocking Wizard)进行连接。

AXI总线

2.3 FDMA

FDMA 是米联客基于AXI4总线协议设计的一个DMA控制器,将其挂载到AXI4总线上,可以方便地对PL或者PS端DDR进行读写。

  • FDMA写时序

FDMA写时序如下图所示。将fdma_wready拉高,当fdma_wbusy为低的时候表示总线空闲,此时可以拉高fdma_wreq,同时设置起始地址和数据长度。当fdma_wvalid为高时,写入有效数据。最后一个数据写完,fdma_wvalid和fdma_wbusy会拉低。

AXI总线

  • FDMA读时序

FDMA读时序如下图所示。将fdma_rready拉高,当fdma_rbusy为低的时候表示总线空闲,此时可以拉高fdma_rreq,同时设置起始地址和数据长度。当fdma_rvalid为高时,输出有效数据。最后一个数据读完,fdma_rvalid和fdma_rbusy会拉低。

AXI总线

对FDMA IP参数进行配置:这里采用32位宽地址线以及64位宽数据线进行测试。

AXI总线

然后,将FDMA连接到AXI总线上,并通过axi_smc IP进行数据位宽转换。将需要调用的接口接出来,得到以下BD工程。

AXI总线

配置起始地址为0x0000_0000,令DDR的读写地址从0开始。

AXI总线

最后在顶层文件中添加用户逻辑,并生成bit文件。

03功能测试

该Vivado工程实现的功能是基于AXI总线对DDR3进行连续读写测试,每次突发读写长度为512*64bits,地址范围为0~100M。FPGA板上测试结果如下图所示。

AXI总线

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分