AXI4 DDR读写测试
一、实验任务
本章的实验任务是在 PL 端自定义一个 AXI4 接口的 IP 核,通过 AXI_HP 接口对 PS 端 DDR3 进行读写测试,读写的内存大小是 4K 字节。
二、实验整体框架
三、实验步骤
一、在原来的hello_word工程另存并修改zynq ip。添加axi hp接口,恢复以前的ip状态
二、自定义axi4 full ip核将ip改为主机接口。如图
三、添加自定义ip并修改参数
四、点击自动连接
五、添加pl端信号,m_axi_init_txn这个信号是初始化信号,检测到上升沿的时候才有效,检测到高电平后会立马对地址指向的数据内存初始化,然后我们对齐重命名。m_axi_txn_done这个是对写入和读出的数据对比完成信号。m_axi_erro这个是写入和读数据对比有误信号。这几个信号都改名和引出。如下几个图:
五、m_axi_init_txn连接按键,m_axi_txn_done和m_axi_erro连接led用作观察。由于我的板子只有一个pl端的led因此我就将m_axi_erro信号随便连接一个GPIO外设由于我们的按键一开始为高电平,而DDR初始化信号检测到上升沿才初始化。因此我们这里加一个取反模块。修改属性并手动连接。并验证整个设计
6、为AXI读写添加debug信号,并自动连接
7、生成模块并且更新顶层文件,其他的保持默认ok即可
8、综合以便添加引脚
9、添加引脚
10、生成bit流。
11、导出硬件设计,打开SDK,将原来的SDK删掉
12、新建项目添加以下文件。
这里由于我用不了scanf因此我就添加一个延迟烧录后在延迟这段时间进行初始化和生成debug触发信号。
#include "stdio.h"
#include "xil_cache.h"
#include "xil_io.h"
#include "xil_printf.h"
#include "sleep.h"int main()
{Xil_DCacheDisable();//char *data_in="I have write and read ddr data!\n";for(int i=0;i<100;i+=4){printf("%d is %d\n",i,(int)(Xil_In32(0x10000000+i)));}sleep(10);for(int i=0;i<100;i+=4){printf("%d is %d\n",i,(int)(Xil_In32(0x10000000+i)));}return 0;
}
12、观察数据,正确