基于FDMA和AXI4接口的DDR4遍历读写测试

在这里插入图片描述

本节目录

一、DDR4测试的设计框架
二、FDMA的接口
三、DDR4的读写模块
四、仿真
五、往期文章链接

本节内容

一、DDR4测试的设计框架

通常在FPGA开发过程中,涉及到大数据的存储使用,均会引入DDR内存的读写。第一版的硬件开发,需要配合硬件进行DDR的读写测试,当然,如果仅仅依据ddr的自校准信号来评判ddr内存的读写ok,并不能说服。
对于DDR的内存地址读写,有两种思路,一种是基于软核的读写测试,通过串口打印测试报告来查看,这种方式是基于C语言的DDR的地址写入与读取,并显示对应的测试结果;另一种是在PL侧开发对应的逻辑代码,从而实现DDR内存地址的全遍历读写测试,比对写入和输入的数据,从而实现测试。当然,支持中断启动读写测试的方式,实现DDR4遍历读写测试,并通过内部寄存器获取关键的测试结果与报告。
以下是简单的测试框架,ddr4_rw_fdma是预留的fdma的读写数据接口,用于DDR4遍历读写测试。至于用户侧,同样预留了fdma的读和写接口,这样方便与独立开发。通过xilinx的axi interconnect的rr调度,从而实现axifull接口的仲裁。
在这里插入图片描述

二、FDMA的接口

DMA,内存直接访问,共享DDR内存空间,不同模块实现DDR的数据的读写。
FDMA,可以理解为帧格式的DMA操作,一种简易的DMA的操作方式,将AXIfull接口数据转换成读写测试数据接口,开放给用户侧使用,开发者使用相对方便,对于逻辑处理也更简单,不需要关注AXIfull的内部通道,比如:读通道,写通道,写响应等。
fdma的写通道,转换为axifull的写地址通道、写数据通道、写响应通道。fdma的读通道,转换为axifull的读地址通道、读数据通道。这样的好处,就是FPGA开发者使用fdma的读写通道就可以实现数据的读写,毕竟接口简单,逻辑处理就相对容易和轻松。若追求高性能的dma,需要自己去开发对应的DMA的操作方式。
在这里插入图片描述

三、DDR4的读写模块

DDR4的读写测试,通过一个读写模块实现,主要是模块的状态机来实现。
第一步:等待DDR4的上电自校准ok;
第二步:对DDR4的全地址写入数据,64bit的数据位宽,一个地址对应一个字节,也就是对应4个地址叠加。每四个地址叠加后写入对应的64bit的数据。
第三步:对DDR4的全地址读出,同时与每四个地址叠加后的数据进行比对,并将错误数据计数。
在这里插入图片描述

一些关键的接口数据
i_ddr4_calib_ok表示DDR4的ip核自校准功能是否ok;
i_ddr4_test_boot表示通过寄存器启动遍历读写测试,注意需在o_ddr4_test_finish结束的时候才会生效,并且脉冲生效;
o_ddr4_test_finish表示当前此轮DDR4读写测试结果;
o_error_cnt表示当前此轮DDR4读写测试结果中异常数据。
在这里插入图片描述

四、仿真

①表示上电DDR4自校准结束后,会自动启动一次遍历读写测试。
②表示通过寄存器控制启动DDR4读写测试。
仿真对部分地址进行的验证,上板对全地址进行验证。
可以通过结束信号和错误计数来判断测试结果,从而辅助验证硬件设计是否ok。
在这里插入图片描述

当然,还可以指定地址读写测试等等,这些算是自定义功能开发,其实只要基于FDMA进行二次开发,就可以实现各种DDR4的读写测试功能。

五、往期文章链接

UltraScale+FPGA中Serdes的多lane对齐异常解决方案
vivado时序报告中slack是如何计算的?如何优化时序?
UltraScale+FPGA中GTY的TX路径时钟详解——以40G的ETH MAC IP为例
vivado时序优化——约束异步时钟组set_clock_groups
基于FDMA和AXI4接口的DDR4遍历读写测试
基于fpga的图像处理之3x3_5x5算子模板设计
基于fpga的图像处理之3x3_5x5算子模板中值排序
基于fpga的图像处理之图像灰度化处理(Vivado+Modelsim+Matlab联合仿真验证)
AXI协议之AXILite开发设计(一)
AXI协议之AXILite开发设计(二)
AXI协议之AXILite开发设计(三)
AXI协议之AXILite开发设计(四)
AXI协议之AXILite开发设计(五)
FPGA和Matlab的FFT功能验证(一)
FPGA和Matlab的FFT功能验证(二)
FPGA和Matlab的FFT功能验证(三)
跟小灰灰一起学vivado:7系列FPGA的MultiBoot和Fallback功能更新固件
跟小灰灰一起学vivado:7系列FPGA配置模式之配置数据文件格式和配置时序步骤
跟小灰灰一起学vivado:7系列FPGA配置模式之主SPI四路(x4)
跟小灰灰一起学vivado:PCIe XDMA实现远程更新FPGA固件
Xilinx UltraScale+DDR4项目开发(一)——DDR4 MIG的ip接口信号
Xilinx UltraScale+DDR4项目开发(二)——DDR4 MIG的时钟网络
Xilinx UltraScale+DDR4项目开发(三)——DDR4器件选型与MIG IP的配置
低速接口项目之串口Uart开发(一)——串口UART
低速接口项目之串口Uart开发(二)——FIFO实现串口数据的收发回环测试
低速接口项目之串口Uart开发(三)——串口发送模块和接收模块
低速接口项目之串口Uart开发(四)——UART串口实现FPGA内部AXILITE寄存器的读写控制
低速接口项目之串口Uart开发(五)——QT实现Uart串口寄存器读写工具
低速接口项目之串口Uart开发(六)——zynq系列ps-pl端uart实现共享Axilite内部寄存器的读写
低速接口项目之串口Uart开发(七)——如何在FPGA项目中实现自适应波特率串口功能
低速接口项目之串口Uart开发(八)——如何通过ps侧的串口实现zynq的在线升级(一)
低速接口项目之串口Uart开发(九)——如何通过ps侧的串口实现zynq的在线升级(二)
低速接口项目之串口Uart开发(十)——基于EMIO的自定义PL串口实现zynq的在线升级

### DDR3与AXI4接口之间的读写操作 #### AXI4总线协议概述 AXI 总线协议包括 AXI4AXI4-Lite AXI4-Stream 三类。这些类别均分为主(master)从(slave)设备,并遵循特定的数据传输方式来进行交互[^2]。 #### AXI4总线通道详解 AXI4总线通道被细分为五种:读地址、读数据、写地址、写数据以及写响应。每个通道具备自身的 `valid` 与 `ready` 信号用于握手机制,确保数据的可靠传递。 #### 实现DDR3与AXI4接口间的读写操作 对于DDR3内存模块而言,其作为AXI4接口中的从设备工作。当需要执行读取或写入命令时,由处理器或其他控制单元扮演的角色即为AXI4接口里的主设备发起请求。 ##### 写操作流程描述 1. 主设备发送写地址至目标位置。 2. 当接收方确认准备好接受新数据后返回ACK应答给发出者。 3. 发送实际要存储的信息包到指定地点。 4. 完成之后再给予一次反馈告知此次事务成功完成。 ##### 读操作流程描述 1. 启动器提供所需访问资源的具体定位信息。 2. 若对方能够立即处理,则马上回应准备状态;反之则等待直至条件满足为止。 3. 将所求资料传送给查询源。 4. 结束整个交换过程并清理相关联的状态标记位。 以下是利用Verilog编写的简化版代码片段展示如何通过AXI4接口DDR3进行基本的读写: ```verilog // Write operation example always @(posedge clk or negedge rst_n) begin : write_process if (!rst_n) axi_awvalid <= 0; else if (state == WRITE_ADDR && !axi_awready) axi_awvalid <= 1; // Assert valid signal when sending address end assign axi_wdata = data_to_write; always @(posedge clk or negedge rst_n) begin : read_process if (!rst_n) axi_arvalid <= 0; else if (state == READ_ADDR && !axi_arready) axi_arvalid <= 1; // Assert valid signal during read request phase end wire [DATA_WIDTH-1:0] received_data = axi_rdata; ``` 上述代码展示了启动写入地址阶段(`WRITE_ADDR`)期间设置有效的标志(axi_awvalid),还有在读取地址阶段(`READ_ADDR`)同样设定有效指示(axi_arvalid)[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小灰灰的FPGA

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

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

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

打赏作者

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

抵扣说明:

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

余额充值