使用AXI4接口IP核进行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"intmain(){Xil_DCacheDisable();//char *data_in="I have write and read ddr data!
";for(int i=0;i<100;i+=4) {printf("%d is %d
",i,(int)(Xil_In32(0x10000000+i))); }sleep(10);for(int i=0;i<100;i+=4) {printf("%d is %d
",i,(int)(Xil_In32(0x10000000+i))); }return0; }

 

12、观察数据,正确

接口

接口

接口

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

全部0条评论

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

×
20
完善资料,
赚取积分