AXI_Lite总线应用(下)PS端读写BRAM

本文详细介绍了ZYNQ SoC中AXI_Lite总线在PS(处理器系统)和PL(可编程逻辑)间通信的实现过程。通过实例展示了PL如何写数据给PS以及PS如何写数据给PL,并通过ILA验证和SDK串口信息展示了通信的正确性。重点讲解了寄存器地址映射、中断服务以及数据长度的处理。
摘要由CSDN通过智能技术生成

 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

一、总览

二、实战效果

1.PL 写数据给PS效果

2.PS写数据给PL效果

总结



前言

没看过上一篇的去看一下上一章节对AXI_Lite在PL端的编写和使用,接下来是PS端的介绍


AXI_Lite总线使用方法(上)pl端读写BRAM



一、总览

 如图,main函数实现的功能主要是初始化中断,中断来自WRRD模块发送数据完毕,中断触发为上升沿。具体功能往下看。

我们首先来看#define。不知道还有没有记得上一讲的slv_reg寄存器。这个寄存器主要是AXI Lite的数据,我们来看上一讲我们在PL端定义的寄存器功能。 

如图,slv_reg0对应读起始信号(STAR)。slv_reg1对应读起始地址(STAR_ADDR)。slv_reg2对应PS向PL写数据长度,slv_reg3对应PL向PS写数据长度。我们点进具体看看这些地址是来自哪。ctrl+鼠标左键点击。

 我们发向pl_bram_wrrd.h里写着slv_reg0-4的地址为0 4 8 12.这是为什么呢?我们在选择AXI_Lite总线位宽的时候默认选择的是32位,1字节等于8bit(8位)。所以32位就等于4个字节,寄存器也是32位的。所以一个寄存器占地址4个字节,所以slv_reg0地址位0-3。slv_reg1地址位4-7.。以此类推。

然后我们来看main函数

 中断初始化和配置我就不讲了,资料很多。我这while里实现的功能就是识别到输入后发送至PL并读出来。

 中断服务函数自然是检测到PL端的中断后开始读取PL端发送的数据。这里读数据和上面的读数据有一点区别。while里的读的数据长度是PS端输入字符后由strlen函数读取的。中断里的字符长度是读取PL端的数据slv_reg3得到的。区别如下图。。

 PS写数据函数如下

 PS和PL的通信应该还算是比较清楚了。。之间的联系主要就是PL写寄存器的方式,PS通过查询地址读写数据。






二、实战效果






1.PL 写数据给PS效果

PL定时每两秒发送四个字符串数据,字符串为a-z循环发送,我们先来看ILA的效果

我们打开VIVADO的ILA窗口,设置如下en信号位上升沿触发,

we信号为0XF(4‘b1111)(读写方向,1为PL写向PS。0为PS写向PL)。

开始仿真。

 我们看到传输了字符串。我们看看SDK的串口信息

PS端读取正常,PL端发送正常






2.PS写数据给PL效果

我们现在把ILA的触发方式,we信号由1111改成0000(读写方向取反)

然后再SDK串口输入字符12345

 PS环回识别正常,我们也看到PL和PS传输数据长度不同时是可以区分的。我们来看看PL端

我们看到,PL端也接收到了12345的串口信号。实验结束 






总结

        AXI_Lite总线的使用方法还是很简单的,可能时序对新手来说看起来还是比较头疼。我们在使用时注意PL关注寄存器的功能,我们给寄存器自定义功能要和PS上相对应。PS读写这些寄存器就通过地址映射。这就是ZYNQ的魅力吧。让人兴奋的硬软件协同设计。

       

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值