低速接口项目之串口Uart开发(十二)——基于FDMA和ZYNQ实现PL读写测试PS侧DDR3

文摘   2024-11-24 13:57   江苏  
一、zynq PS侧系统地址和DDR允许操作地址

二、zynq PL侧地址映射以及读写操作

三、PL读写测试PS DDR3验证


一、zynq PS侧系统地址和DDR允许操作地址

在FPGA项目中,内存DDR3/4的控制读写是基本功。若内存硬件与PL侧相连,意味着内存所有的存储空间都可以由FPGA的PL侧用户逻辑开发使用。但很多时候考虑成本,zynq板块只在PS侧放置一块DDR3/4。对于PL的用户逻辑想使用DDR进行存储,就需要考虑到PS侧的DDR哪些内存空间是可以进行操作的。

从手册ug585中可以看出,0x0010_0000到0x7FFF_FFFF的地址范围,允许互联操作。那么实际上呢?读者通过PS的嵌入式内存地址读取,发现可操作的地址空间存在些许偏差。

在PS侧设备刚上电时候,对地址进行刷新读取,发现在0x00114010之后的地址内容才为0。当然,这个是zynq7020,读者可以自行确认下自己所用板块的ps侧DDR的可用范围,之后开放给PL侧使用。

二、zynq PL侧地址映射以及读写操作

对于PL侧需要搭建基于zynq操作系统的Block Design,下图是笔者的bd框图,在框图中需要在处理器中选择S_AXI_HP接口,同时引入axi_interconnect用于axifull接口的扩展。两路axifull操作,一是ddr3_test用于读写验证;二是串口通过fdma写入带升级BIN文件。

当然,最重要的一点是需要对S_AXI_HP的地址进行映射,此处选择的是全地址,考虑原因是bd上选择的数值通常1G/512M/256M/128M等,选择最大地址,在PL侧逻辑开发时候,注意使用的DDR的操作范围即可。笔者在进行PS侧DDR读写测试时候,选择的起始地址为0x0020_0000,结束地址为3FFF_FE00。

三、PL读写测试PS DDR3验证

设计思路,通过寄存器启动读写测试,同时开发读写测试状态寄存器以及错误计数寄存器。读写启动之后,通过FDMA对设定的地址空间进行写入操作,选中地址并将地址作为数据内容写入,待写入所有地址空间,读取地址内容并与地址进行比对,若错误则计数加一。

设计三个寄存器,基地址0x4000_0000,偏移地址0x0000_2000为启动寄存器,偏移地址0x0000_2004为读写测试状态寄存器,偏移地址0x0000_2008为错误计数寄存器。

借助于QT上位机的串口寄存器读写实现DDR3的读写测试启动以及结果验证。

问题来了,如果仅仅通过寄存器来确认,很多人对此持怀疑态度,那么DDR3中的内容是否写入成功?

笔者借助于PS侧的内存读写,先在启动读写之前进行地址内容的读取,如下:

之后,启动读写测试,然后刷新内存地址,得到:

证明在0x0020_0000到0x3FFF_FE00这段地址内读写测试验证OK。


小灰灰的FPGA
努力成为一名FPGA全栈工程师,分享FPGA、嵌入式、硬件及软件知识,扩充自己的知识面,比如图像处理,通信协议以及数据处理等方向。
 最新文章