DDR3 AXI4接口读写回环测试

        上篇blog中记录了DDR3提供的ui接口读写回环测试,非常方便的完成了整颗DDR颗粒的读写,官方提供的ui接口,让用户可以像操作普通RAM那样去便捷、高效的完成DDR读写开发。

        DDR3官方还提供了AXI4接口,这个需要在MIG中勾选上AXI4选项,下面针对AXI4接口读写DDR3进行相关记录。

        在使用DDR3的AXI4接口之前,先要熟悉AXI4总线协议,见本人blog《AXI基础知识学习》,在开发过程中,由于AXI4总线理解不足,出现了3处错误,导致开发持续进行了一周,后面细讲。

一、MIG的IP配置

        MIG配置仅一处与ui接口有区别:

DDR3 AXI4接口读写回环测试_第1张图片

二、仿真分析

        (坑1)五个通道的握手信号的右边沿(下降沿)一定要按照AXI4总线协议去对齐!!!!如下图中AW通道的awvalid信号和awready信号的下降沿必须对齐。

(1)AW通道,地址为28'h000_0000时,写地址握手。

DDR3 AXI4接口读写回环测试_第2张图片

(2)W通道,地址28'h000_0000之后的写数据握手

        burst一次写突发大小256,数据位宽128,一个AXI4地址对应1个字节,两次突发之间地址累加256*(128/8)= 'd4096 = 'h1000。(坑2)此处地址间隔一定要计算正确!!!!否则导致读数据错误。

        W通道握手成功1次,写数据就累加1写入,一次突发,最后一个数据与第一个数据差值'hff。

        第一次突发写数据开始:

DDR3 AXI4接口读写回环测试_第3张图片

        第一次突发写数据结束:

DDR3 AXI4接口读写回环测试_第4张图片

 (3)B通道握手,右边沿对齐

DDR3 AXI4接口读写回环测试_第5张图片

(4)依次进行第2次写突发、第3次写突发,直到写地址累加到28'hfff_f000,进行最后一次写突发

DDR3 AXI4接口读写回环测试_第6张图片

DDR3 AXI4接口读写回环测试_第7张图片

 (5)整颗DDR颗粒写满之后,开始读。

        AR通道,首先读地址握手,AR通道的arvalid信号和arready信号的右边沿对齐。读地址28'h000_0000,两次读突发之间的地址间隔也是'h1000。

DDR3 AXI4接口读写回环测试_第8张图片

(6)R通道,读数据 

        第一次突发读数据开始:

DDR3 AXI4接口读写回环测试_第9张图片

         第一次突发读数据结束:

DDR3 AXI4接口读写回环测试_第10张图片

(7)依次进行第2次读突发、第3次读突发,直到读地址累加到28'hfff_f000,进行最后一次读突发

DDR3 AXI4接口读写回环测试_第11张图片

DDR3 AXI4接口读写回环测试_第12张图片

DDR3 AXI4接口读写回环测试_第13张图片

        至此,完成AXI4接口的整颗256MB、16bit位宽的DDR3颗粒读写测试。

        (坑3)移植AXI4接口相关信号的时候,没有注意到写数据选通信号WSTRB,位宽变成了16,这个位宽是与数据位宽一 一对应的。数据位宽是32bit时,数据选通位宽是4;数据位宽是128时,数据选通位宽是16。

        我在赋值的时候给成了4'hf,导致只有低32bit数据被写入DDR3,进行读测试时,低32位数据正确,高96位数据不受控。

三、总结

        使用AXI4总线去控制DDR3 MIG,相比ui接口会复杂很多,这个要根据项目的需求自行选择;

        另外要注意的是ui接口里面,相关控制信号建议用组合逻辑,然而AXI4总线的信号则是建议时序逻辑。

        附源码:

ddr3_read_write_ctr_axi4.v-硬件开发文档类资源-CSDN文库

你可能感兴趣的:(高速接口,总线接口,fpga开发)