ZYNQ7000系列中PS端与PL端的通信都是通过AXI总线进行连接的,利用好AXI协议是PS与PL交互的基础,因此设计这个实验来进一步了解两者间的通信。

1.实验目的

PL端通过AXI协议访问PS端的DDR内存,其中包括往DDR写数据,以及读取DDR内部的数据。

图 1 实验框图

2.如何实现

看起来实验目的很简单,但是对于像我这样的初学者而言那还是有很多的问题的。例如:

1.芯片内部硬件怎么连接(好比两个人打电话,总得知道电话号码才能交流)

2.谁是主机谁是从机(好比两个人打电话,谁打给谁)

3.什么时候发数据,什么时候读数据,总不能在别人还没存好数据的时候读吧(比如两个人打电话,一个人在睡觉,怎么都打不通吧)

3.设计思路

针对上述3个问题,来设计总的思路,这样能有条理的实现总体的功能。

4.芯片内部硬件连接

ZYNQ中有9个AXI总线(如图 1),其中包含4个General-Purpose Ports(AXI_GP),主要是一些常用的通信,位宽为32位,4个High-Performance Ports,高速的通信,位宽为64位,还有一个AXI_AXP这个我不太了解,不过位宽也是64位。

图 2 ZYNQ示意图

从图 2中可以看出访问DDR3的接口有三条①、②、③条接口,其中PL的访问有两条,分别为①和③,为了简单我们选个③,如果有兴趣可以使用③来写,①来读的操作,这样能更好的理解两者间的交互。

5.从机与主机

这个简单的理解就是图 2中的箭头,箭头连接的一段为从机,没有连接的一段为主。例如AXI_HP接口,主机就是PL,而箭头连接的一段是PS,那么PS就是从机。

6.读写时序的控制

主要的问题集中于PL什么时候写数据;PL什么时候读数据。简单的一种控制就是PL自己控制,例如先写5个数据,在读5个数据,为了增加点难度,我们可以这样设计,用PS来通知PL什么时候写,什么时候读。那么又涉及到了两者的通信,而这种通信就比较普通,不是内存的控制,具有普适化的意义,这里使用AXI_GP来进行通信,以PS为主机。

注:PS发数据是走红色的路还是蓝色的路是由其地址决定的图 3 PS发命令的端口

7.总结

最后我们使用AXI_GP接口来控制读写,其中PS为主机;用AXI_HP接口来进行DDR3数据的输入与输出,这时PL为主机。

8.程序设计流程图

流程图包含PS部分和PL部分。

9.PS部分流程设计

PS端的程序,我们采用轮训的方式进行读写命令完成的获取,也就是PS端不停地读取PL端是否写完,以及是否读完的命令。后续可以拓展为采用中断的方式进行读写控制。

图 4 PS端流程图

10.PL部分流程设计

PL端AXI_HP的流程如图 4所示,一个简单的状态机来完成数据的读写,此时PL为主机。图 5 PL端AXI_HP的状态机

PL端AXI_GP的流程图如所示,也是一个简单的状态机,但是此时PL是从机,PS是主机,PS发出读取(是否写完或者是否读取)的状态,PL将此时的状态返回给PS端,让PS来进行判断是否需要进行下一步操作。

图 6 PL端AXI_GP的状态机

11.程序设计

首先,设计FPGA端的程序。有几个注意点:PL端的逻辑一般都是先仿真,然后进行板级调试,如果仿真没过,那么下载到板子上肯定不过(仿真很重要)。

ZYNQ-7000的AXI协议不是和ARM一样严格遵守的,有些端口是没有用到的如图 7,但是响应这些一定要按协议来。

这里可以简单的想一下,PS端的DDR怎么能用PL来仿真呢?我能想到的解决方法有2个(欢迎提供更多的方法):在PL端利用ddr的ip核选择AXI模式进行仿真,操作比较麻烦,同时仿真时间长,但是参考价值高

就在PL端用一个带AXI4总线的bram进行仿真,比较简单,但是参考价值低

为了偷懒,我这边就用方法2来仿真。这个IP中有些端口也是没有用到的图 7 axi_bram s_axi_awlock端口

根据4.2中的流程图,以及5中的分析,自己编写axi协议后,得到仿真图如图 8 AXI_HP的仿真,采用AXI INCR突发模式,突发大小为8个字节,突发长度为2。突发的地址是根据ZYNQ中的硬件地址来的如图 9,采用32’h0008_0000为起始地址(仿真的起始地址是0)。图 8 PL端的AXI_HP仿真图

那么往ddr3写数据的地址应该怎么确定呢?图 9中可以看到AXI_HP可以用的地址,我用的起始地址是32’h0008_0000。图 9 PS的地址映射

这里有个问题可以想一下,PS端的程序也是跑在DDR3里面的,那么怎么才能使得PL端访问的地址与程序跑的地址不冲突呢?(这个可以在评论中给点意见)

我这里的解决方案有两个:简单的就是写的地址与程序的地址不一样就好了

就是在PS端分配好内存用来写ddr,然后将这个地址的起始地址发给PL,这样肯定不会有冲突(也许xilinx dma那个ip核就是这么干的吧)

同样为了偷懒,我采用第一个方法,那么怎么知道程序跑的地址呢?

在SDK的工程里面有个lscript.ld里面有许多地址的信息如图 10,图 11。可以看到这边的地址是从100000开始的,所以我用的地址不在这里。图 10图 11

12.程序验证结果

因为熟悉了一点AXI协议,就自己写了个AXI通信的模块,然后实现了PL与ddr的通信,以及PL与PS的通信。

本来用黑金zynq7020的板子验证的,结果电源模块坏了,找客服修说过保了,就不能修了,哎,好可惜。。。。。。。。。。。应该是二极管击穿导致的。

于是接了个ZCU102的开发板来测试这个程序,不过原理都是一样,只是代码上的地址可能要改一下。

写数据结果如图 12图 12 写数据

读数据结果如图 13图 13 读数据

上述读写的结果一致,完成了本次实验,这次实验中最重要的部分就是对AXI协议的理解。

参考资料

附录

Block Design如图 14 这个是ZCU102的,如果是zynq-7000.只要把中间的换了就好。

图 14 Block Design

ps读写ddr3里面的数据 zynq_ZYNQ_PL与PS的DDR交互相关推荐

  1. ps读写ddr3里面的数据 zynq_Zynq:用PS控制DDR3内存读写

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...

  2. PL读写DDR3 实现PS和PL间的数据交互 代码分析

    本文是PL读写DDR3 实现PS和PL间的数据交互 的继续,深入分析其代码. 首先分析基本要求,或者需求分析,然后读写流程描述,实测采集的读写过程的波形图,最后分段代码分析,这个代码是上文中利用viv ...

  3. PL读写DDR3 实现PS和PL间的数据交互

    本文构建一个AXI4-Lite Master IP来实现PL读写DDR3.最后用sdk 程序验证pl 读写过程中写入的数据. 本文参考 https://www.eefocus.com/antaur/b ...

  4. zynqpl端时钟_第十一章 ZYNQ-MIZ701 PS读写PL端BRAM

    本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将结果 ...

  5. zynqpl端时钟_第十二章 ZYNQ-MIZ702 PS读写PL端BRAM

    本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将结果 ...

  6. Xilinx MIG核读写DDR3内存,连续读写内存的正确方法(时序)及代码

    关于Xilinx 2020.1新建工程时配置MIG核的完整步骤,请参阅:https://blog.csdn.net/ZLK1214/article/details/111349678 MIG核里面有两 ...

  7. C++ MFC界面读写USB HID设备数据程序

    C++ MFC界面读写USB HID设备数据程序 发一个简单易用的界面,用来对USB HID设备(比如说游戏手柄,控制面板等)读写数据,一般情况下面板上有一些LED,可以帮助我们测试读写是否正确.另外 ...

  8. 读写xml节点的数据总结

    读写xml节点的数据总结 读: //打开某文件(假设web.config在根目录中) string filename=Server.MapPath("/") + @"We ...

  9. C语言文件读写操作,写入数据到文件

    很早写的在linux系统下的文件读写操作,写入数据到文件,很时候初学者学习 #include <stdio.h>int writeInfoToFile(char *strFile) {in ...

最新文章

  1. Linux环境编程--waitpid与fork与execlp
  2. 《深入浅出Ext JS》2.19全国首发
  3. 白盒测试实践作业任务分配
  4. 列表对象转数组 微信小程序_微信小程序——无限递归的层次列表
  5. 实战项目---模拟商品采购中心信息平台
  6. DM368开发 -- uboot 使用
  7. 第7章:MapReduce编程
  8. linux比较两个文件md5,linux下如何批量比对两个文件的MD5值是否一致,SHA1是否一致。...
  9. 另一种无法enable ABAP source code tool的原因
  10. 日照职业技术学院计算机怎么样,日照职业技术学院宿舍条件怎么样 住宿环境好不好...
  11. Nginx文档阅读笔记-DNS load balancing(DNS负载均衡)
  12. Linux less命令:查看文件内容
  13. 通过可视化来了解你的Spark应用程序
  14. Java 蓝桥杯 高精度加法
  15. Visual Studio .NET已检测到指定的Web服务器运行的不是ASP.NET 1.1 版...的解决办法
  16. 7年,OpenStack从入门到放弃
  17. neo4j 学习-2
  18. 当Shell遇上了NodeJS
  19. 将web项目部署到阿里云服务器上
  20. 计算机驱动程序的安装过程,电脑常用的驱动程序的安装与管理

热门文章

  1. win10 右键卡死(资源管理器)
  2. 00后《新白娘子传奇》热度爆棚,最佳翻拍不输雅芝姐
  3. SRS源码分析-rtmp转rtc流程
  4. DP83TG720SWRHARQ1 IC TRANSCEIVER 接口芯片、TCAN1051VDRBTQ1
  5. 全球市场迅速广泛接受FreeStor飞康SDS转型成功
  6. Jmeter增加线程下级循环设置forever,来减少施压端线程创建及销毁的开销
  7. PR视频字幕批量生成程序(用讯飞听见识别音频)
  8. CSS样式的计算过程
  9. wampserver配置虚拟主机(详解)
  10. 佳能hdr_21天摄影打卡计划 5月15日主题:HDR