ZYNQ进阶之路12--自定义AXI-FULL IP实现PL端向DDR3写数据和PS端实现高速通讯

14 篇文章 8 订阅
14 篇文章 41 订阅

导语

之前一段时间博主事情实在太多没能实现博客一周一更新的梦想,哎,梦想总是会被现实打败!可能以后都不能保持一周一更新了,但是一旦有时间一定会继续更新,给大家带来优质的博客内容(自己认为还是比较优质的,哈哈哈)。好了进入正题,之前的章节中我们讲解了如何自定义AXI-Lite IP实现PWM,AXI4-Lite是一个轻量级的,适用于吞吐量较小的地址映射通信总线,本章节中我们讲解如何通过自定义AXI-FULL IP实现PL端写数据到DDR3中并和CPU共享内存数据,实现数据的高吞吐量传输。但是苦于博主手上没有高速的外设设备可以使用,所以我们用低速的串口来验证总线通讯的真确性。虽然用的是串口实现,但是也会充分反映开发的流程和高速通讯的正确性。根据官方数据手册说明AXI4-Lite的理论带宽能达到600MB/s,而AXI-FULL/AXI-Stream能达到其两倍以上,但是因为AXI-GP接口只能单数据传输,而AXI-HP接口能批量传输数据,所以实际运行时的带宽可能是AXI4-Lite的好几倍甚至更高。
在这里插入图片描述

配置PS端

新建工程

首先新建工程如下:
在这里插入图片描述

按照如下步骤配置PS端

选通AXI-GP和AXI-HP接口:
在这里插入图片描述
选通QSPI接口和UART1接口
在这里插入图片描述
设置PL时钟频率为100MHz
在这里插入图片描述
设置DDR型号
在这里插入图片描述
设置PL到PS端的中断接口
在这里插入图片描述

自定义AXI-FULL IP

添加AXI-FULL Master接口用于高速通讯
在这里插入图片描述
添加AXI-Lite Slave接口用于串口波特率配置
在这里插入图片描述

自定义AXI-Lite Slave 代码,加入之前章节中我们使用的串口接收模块

首先修改之前串口接收模块,将波特率参数改为输入,并将位宽改为11:
在这里插入图片描述
在Slave中加入串口模块
在这里插入图片描述
增加简单逻辑让数据能够缓冲16字节
在这里插入图片描述
slave中增加串口数据的输入输出口
在这里插入图片描述

修改AXI-FULL Master代码

将burast长度修改为4,这样每次突发数据只会发送4个words数据,并添加串口数据输入信号
在这里插入图片描述
将以下参数修改为4,这样就可以将burst的次数设置为1次,具体如何计算可以查看代码注释和博主下载资料中的书籍《zynq-7000 嵌入式系统设计与实现》
在这里插入图片描述
在官方生成的IP中是通过一个一段状态机来实现读写DDR的逻辑的,在这里我们只需要往DDR3写数据,所以修改状态机如下
在这里插入图片描述
修改发送数据逻辑
在这里插入图片描述
将写完成信号输出到模块外
在这里插入图片描述

修改IP顶层代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后生成IP,添加IP到工程中
在这里插入图片描述
设置IP参数
在这里插入图片描述

添加AXI 互联模块,完成Block Design

添加互联模块:
在这里插入图片描述
在这里插入图片描述

将写完成信号连接到PS端的中断接口上

在这里插入图片描述
将串口RX接口接到外部IO上
在这里插入图片描述
将初始化接口连接到复位上
在这里插入图片描述
这里完成了block design的设计,接下来将串口RX绑定引脚;

在这里插入图片描述

生成bit文件,导入SDK,开始软件编程

导入SDK如下所示
在这里插入图片描述
创建helloword工程:
在这里插入图片描述
写入如下代码:
在这里插入图片描述
上图中:1、地址项其中第一个为配置波特率的基地址,第二个为DDR3中共享数据的地址
2、数据的联合体
3、将串口波特率设置为9600
4、PL端数据发送完成中断服务函数,在这里面实现将PL从PC接收到的串口数据通过PS端的串口发送到PC上,其中Xil_DCacheFlushRange函数功能为维护L1、L2缓存和DDR指定地址的数据一致性,该函数至关重要,没有他就不能正确的读取到PL发送到DDR的数据。
5、中断的初始化函数,IRQ模式,上升沿中断使能。

下载到平台验证

		将工程编译后,下载到板子上,打开两个串口窗口,将一个串口连接到PL端,另一个连接到PS端,往PL端发送16byte的数据(注意必须发送16byte,如需要其他长度可自行修改PL工程或者添加FIFO缓存数据),PL端会收到相同的数据,如下所示

在这里插入图片描述

结束语

好了,到这里本章节就结束了,如有疑问或者其他好的想法可以私信联系博主或者给博主发邮箱多多交流,博主邮箱:wanpengwork@163.com,在下一章节中我们将讲解如何使用的AXI_full总线协议去读取PS端写到DDR3中的数据哦,感兴趣的同志可以持续关注博主博客哦。

  • 22
    点赞
  • 141
    收藏
    觉得还不错? 一键收藏
  • 28
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值