ZYNQ中AXI4-Lite实现PS与PL通信

ZYNQ中AXI4-Lite实现PS与PL通信

0 前言

  ZYNQ开发中需要使用PS向PL发控制信号,PL将数据发给PL端处理,可以使用AXI4-Lite协议完成。

  本例中通过自定义AXI4-Lite接口IP,配置了4个从寄存器:slv_reg0、slv_reg1,其中slv_reg0负责接收来自PS的指令,slv_reg1负责发送数据给PS,完成PS与PL的交互。因为IP配置中寄存器最少设置4个,所以闲置了2个。

1 Vivado部分

  配置好zynq核后开始新建AXI-Lite接口IP,Tools->Create and Package New IP,选择“Creat AXI4 Peripheral”;接着到Peripheral Details,修改IP名字,myip改为axi_lite_test,其它可默认;然后到Add Interfaces,Interface Type:Lite,Interface Mode:Slave,数据位宽32,寄存器个数4;最后Create Peripheral选Edit IP。
  打开独立的IP编辑窗口后,在端口声明处添加自定义输入输出端口,并在代码中添加相应程序。

在子文件端口列表添加自定义端口:
在这里插入图片描述

这是设置的4个寄存器:在这里插入图片描述

添加PL接收PS数据逻辑:
在这里插入图片描述
同时将PL接收数据always块中发送寄存器slv_reg1和闲置寄存器代码注释掉:
在这里插入图片描述

添加PS读取PL数据逻辑:
在这里插入图片描述
同时将PS读取从寄存器当前值的always块中接收寄存器slv_reg0,闲置寄存器代码注释掉:在这里插入图片描述

在顶层文件添加相应端口:
在这里插入图片描述
在这里插入图片描述

最后打包IP完成,在block design中添加该ip如下:
在这里插入图片描述
pl_num可以接入其它IP中使用,需要发送的数据可以接入ps_num等待PS端读取。连接好线后vivado端便结束了,最后保存生成bit流,导出硬件,打开vitis。

2 Vitis部分

  新建应用工程,使用从vivado导出的.xsa文件,可以直接选择Hello World模板C语言工程,也可以选择空白工程。选择空白工程后,需要右键工程src文件夹,选择New->File,接着在File name后输入 main.c结束。
  在板级支持包里找到参数头文件xparameters.h,在里面找到自定义IP的基地址(ctrl+F,搜索AXI_BASEADDR,找到包含IP名的),然后在main.c中重命名一下方便使用。在板级支持包里找到自定义IP的头文件,本例为axi_lite_test.h,里面有读写寄存器调用的函数,还有自定义IP中的4个从寄存器在基地址上的偏移量,可以直接在main函数中使用,也可以重定义一下使用。
在这里插入图片描述
在main函数中向PL端发送数字5(写reg0地址):
AXI_LITE_TEST_mWriteReg(AXI_BASEADDR,REG0_OFFSET,5);
接收PL端数据(读reg1地址):
AXI_LITE_TEST_mReadReg(AXI_BASEADDR,REG1_OFFSET);

  • 2
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花开半夏321

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值