当前位置:   article > 正文

基于ZYNQ7020芯片(黑金开发板AX7020)之AXI-FULL DDR的PL与PS交互操作。_黑金7020

黑金7020

基于ZYNQ黑金开发板AX7020的AXI-FULL DDR的PL与PS交互操作

	好久没有新贴交给中国的兄弟们了,今天总结一个这个部分,希望为芯片开发注入一个明灯。
	先说一下硬件环境:
	开发板:黑金AX7020
	工具: Vivado 2019.2 , Vitis : 2019.2
	开发时间:2023/12/16
	知识总结及开发人员:landy哥。
   开发目的:更深入了解X公司AXI_FULL(基于AXI4)的开发,深入研究PL与PS的DDR交互。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

数据流向:
在这里插入图片描述

PL端实现AXI-full master,将PL串口接收到的数据写入DDR3指定地址并产生中断通知PS将写入的数据读出,再将读出的数据通过PS的UART1发送到PC端,本章节将在之前章节的基础上实现将一个反向的流程:通过PS端的UART1接收PC端的数据,然后将接收到的数据写入DDR3指定地址,然后通过AXI-LITE通知PL端读取DDR3数据,再将读取到的数据通过PL端串口发送会PC。这样我们就实现了通过AXI-FULL 的PL到PS和PS到PL的双向高速数据传输了。
  • 1

黑金这块板的一些设置要注意:

DDR的设置:

在这里插入图片描述

网口的设置:

在这里插入图片描述

开发步骤

新建工程省略,我们直接进入重点编辑当中的uart_axi_full IP模块如下:
引用一下如何新建(新手入门看这个):
带你快速入门AXI4总线–AXI4-Full篇(3):AXI4-Full接口IP源码仿真分析(Master接口) | 电子创新网赛灵思社区 https://xilinx.eetrend.com/blog/2023/100568675.html
2.编辑IP如下方法:
在这里插入图片描述
将ZYNQ串口发送模块加入这个IP中,在该IP顶层文件中加入如下代码,该代码实现串口发送的逻辑:
在这里插入图片描述
然后我们将串口发送模块中的波特率计数位宽改为16位的,因为如果要使用9600波特率的话计数值=100M/9600 = 10417,所以至少需要14位位宽:
在这里插入图片描述
然后就是在顶层模块加入需要的信号接口:
在这里插入图片描述
在AXI_FULL master模块中添加信号端口和修改逻辑代码,在master模块中我们需要将master读数据和写数据分开,在执行这样的修改之前我们首先需要知道axi总线的一些基础知识,首先axi总线包含如下几个通道:
1、读地址通道(AR)
2、写地址通道(AW)
3、读数据通道(R)
4、写数据通道(W)
5、写响应通道(B)
每个通道由一个信号集构成,并且使用双向的valid和ready握手信号机制,读写流程如下所示:

AXI协议

是基于burst的传输,并且定义了以下5个独立的传输通道:读地址通道、读数据通道、写地址通道、写数据通道、写响应通道。
地址通道携带控制消息,用于描述被传输的数据属性;数据传输使用写通道来实现master到slave的传输,slave使用写响应通道来完成一次写传输;读通道用来实现数据从slave到master的传输。
在这里插入图片描述
在这里插入图片描述
在AXI_FULL master模块中我们需要通过修改逻辑代码将读通道和写通道分割成两个独立的状态机,以将两个通道独立开来,首先我们将原来的一个状态机改成两个完全独立的分别控制读写的状态机:

写状态机:

在这里插入图片描述

读状态机:

在这里插入图片描述
我们还需要将接收到的数据接收到一个寄存器中,固定位宽位128位,也就是uart固定为16个字节,也就是说我提供的示例都只支持一次必须传输16字节的数据,如果需要其他长度或者不定长度,可以通过自己添加FIFO,修改逻辑实现:
在这里插入图片描述
在这里插入图片描述
然后我们需要修改AXI_LITE slave模块,增加uart发送模块波特率寄存器配置通道和PS通知发送数据开始信号通道:
在这里插入图片描述
到此我们IP模块就修改完成了,然后就是重新生成IP,并将MIO使能,这样我们在程序中可以控制PS端的led,查看系统运行状态。再然后就是绑定PL端串口TX信号引脚,生成bit、xsa文件->导入SDK->打开SDK->创建helloworld工程如下所示:
1.先要建立一个平台工程。
在这里插入图片描述
导入XSA
在这里插入图片描述
在这里插入图片描述

新建一个HELLO WORLD,再修正代码:
在这里插入图片描述
然后编译后下载到芯片中,将PL和PS端的串口接入PC,两边同时连续发送数据,互相接收发送。

测试如下:

在这里插入图片描述
以上,完成。

总结:

在该工程中我们使用了PS端的串口接收功能,PS端串口接收和发送分别有一个64字节的FIFO,但是因为串口接收阈值设置为16,所以固定接收16个字节数据后才会发生中断。
  • 1

此测试工程得到以前知识的总结和各大网友的支持,只希望可以为学习的你更进一步,大家一起学习才是真的开心。加油,国产芯片之路。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/81742
推荐阅读
相关标签
  

闽ICP备14008679号